当其他列具有特定值时,MySQL表按一列排序

时间:2017-05-09 06:22:51

标签: mysql hql

我有两个mysql表 record_items property_values ,结构如下。

table : property_values (column REC is foreign key to record_items)

id(PK)|REC(FK)| property | value|
 1    | 1     | name     |   A  |
 2    | 1     | age      |   10 |
 3    | 2     | name     |   B  |
 4    | 3     | name     |   C  |
 5    | 3     | age      |   9  |

table: record_items

id(PK) |col1|col2 |col3| 
1      | v11| v12 | v13|
2      | v21| v22 | v23|
3      | v31| v32 | v33|
4      | v41| v42 | v43|
5      | v51| v52 | v53|

record_items表仅包含有关记录的基本信息,其中property_values表将record_item保存为外键,并且每个属性及其值都保存在单独的行中。

现在我想根据特定属性(例如按年龄)对record_items进行排序。 我的HQL查询就像

Select distinct rec from PropertyValues where property="age" order by value;

但是这个查询将跳过记录2,因为它没有财产年龄的条目。 我希望结果具有包含年龄属性的记录,这些记录按照那些根本没有年龄属性的人所附加的排序顺序。我该如何查询?

1 个答案:

答案 0 :(得分:1)

这是一个原始的MySQL查询应该可以解决这个问题:

SELECT t1.*
FROM record_items t1
LEFT JOIN property_values t2
    ON t1.id = t2.REC AND
       t2.property = 'age'
ORDER BY CASE WHEN t2.value IS NULL THEN 1 ELSE 0 END, t2.Value

我注意到Value中的property_values列正在混合数字和文本数据。这不适用于排序目的。

Demo here

相关问题