【发布时间】:2012-05-12 08:06:33
【问题描述】:
假设我们有一个这样的 NAME 表:
PERSON_ID PART_TYPE VALUE
而PERSON_ID 是对PERSON 的外键引用。
PART_TYPE 内部将是 FAMILY、GIVEN、PREFIX、SUFFIX 等值。值自然是实际值。
您将如何编写一个 SQL 查询(更不用说 Hibernate)以按 PART_TYPE 排序,然后按 VALUE 排序 FAMILY PART_TYPE,然后 VALUE 排序 GIVEN @ 987654335@?
考虑一下你有这三个人的场景:
Given3 Family10
Given5 Family10
Given7 Family10
使用这条 SQL:
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
我想要:
ID1 FAM Family10
ID2 FAM Family10
ID3 FAM Family10
ID4 GIV Given3
ID5 GIV Given5
ID6 GIV Given7
因此,当前状态下的那些 Family10 行的顺序是不确定的——它可以是 ID1、ID2 和 ID3 的任意组合。我希望它们根据给定值排序。我真的不知道该怎么做,即使有多个 select 语句。
我想这样做的原因是因为我想获取这些人员 ID,并且我可以在我的末端进行一些过滤以获取不同的人员 ID 并对其执行一些分页逻辑,然后实际加载人员(从而减少在很多 SQL 调用上)。我目前无法更改数据库架构。
【问题讨论】:
-
如果有人能想到更好的描述方式,可以随意编辑标题行。我为此苦苦挣扎。
-
你能举个例子说明你想要的输出吗?你现在有什么 ORDER BY ?也许我读错了,但我有点困惑
-
@dweiss 我添加了一个我想要的示例。这更清楚了吗?我还更改了 ID 以减少混乱。不过,我在发布的 SQL sn-p 中确实有 ORDER BY 子句。
标签: java sql oracle hibernate sorting