假设我们有一个这样的NAME表:
PERSON_ID PART_TYPE VALUE
和PERSON_ID
是PERSON
的外键引用。
内部PART_TYPE
将是FAMILY
,GIVEN
,PREFIX
,SUFFIX
等值。当然,值将是实际值。
你如何编写一个SQL查询(更不用说Hibernate)来排序PART_TYPE
,VALUE
FAMILY
PART_TYPE
,然后是VALUE
{1}} GIVEN
?
考虑一下这三个人的情景:
PART_TYPE
使用此SQL:
Given3 Family10
Given5 Family10
Given7 Family10
我明白了:
SELECT this_.person_id, name1_.part_type, name1_.value
FROM person this_
LEFT OUTER JOIN name name1_
ON this_.person_id =name1_.person_id
ORDER BY (
CASE
WHEN name1_.PART_TYPE = 'FAMILY'
THEN 0
WHEN name1_.PART_TYPE = 'GIVEN'
THEN 1
END),
name1_.VALUE,
我想:
ID2 FAM Family10
ID1 FAM Family10
ID3 FAM Family10
ID4 GIV Given3
ID5 GIV Given5
ID6 GIV Given7
因此,当前状态中那些Family10行的顺序是不确定的 - 它可以是ID1,ID2和ID3的任意组合。我希望它们根据Given值排序。我真的不确定如何做到这一点,即使有多个选择语句。
我想要这样做的原因是因为我想得到那些人ID,我可以在我的头上做一些过滤以获得不同的人ID并在其上做一些分页逻辑,然后实际加载Person(从而减少关于很多SQL调用)。我目前无法更改数据库架构。
答案 0 :(得分:3)
这与你要求的有点不同,但也许它很有用 - 它给每个人的家庭和名字。
SELECT this_.person_id, family.value as family, given.value as given
FROM person this_
LEFT OUTER JOIN name family
ON this_.person_id = family.person_id
and family.PART_TYPE = 'FAMILY'
LEFT OUTER JOIN name given_
ON this_.person_id = given.person_id
and given.PART_TYPE = 'GIVEN'
ORDER BY family.value, given.value