【发布时间】:2013-02-22 21:39:48
【问题描述】:
我有一个看起来像这样的查询:
SELECT DISTINCT share.rooms
FROM Shares share
left join share.rooms.buildingAdditions.buildings.buildingInfoses as bi
... //where clause omitted
ORDER BY share.rooms.floors.floorOrder, share.rooms.roomNumber,
share.rooms.firstEffectiveAt, share.shareNumber, share.sharePercent
这会导致以下异常:
Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression
如果我删除 DISTINCT 关键字,查询将毫无问题地运行。如果我删除 order by 子句,查询将毫无问题地运行。不幸的是,我似乎无法获得没有重复的有序结果集。
【问题讨论】:
-
感谢@Lamak 的回复。我不清楚为什么 DISTINCT 会导致数据库忽略其他列,因为没有 DISTINCT 就不会忽略它们。但是,鉴于这很重要,我如何获得有序的、重复的免费结果集?
-
那么您希望如何订购它们?如果您想为
share.rooms列提供重复的免费结果,那么您需要了解,由于同一房间可能对于floorOrder或roomNumber或任何其他列具有不同的值,您如何希望它们被订购?,按那些的最小值?,最大值?。 -
我现在明白了。再次感谢。
-
附带说明:我来这里是因为一个类似的问题,碰巧我忘记了 order by 子句中的一个 id 列(我用于调试)
标签: sql oracle hibernate oracle11g