62

我有一个看起来像这样的查询:

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 子句,查询将毫无问题地运行。不幸的是,我似乎无法获得没有重复的有序结果集。

4

3 回答 3

103

您正在尝试使用未计算的列对结果进行排序。如果您没有DISTINCT那里,这不会是一个问题,但由于您的查询基本上只按share.rooms列分组,它如何将该结果集与其他可以具有多个值的列进行排序 share.rooms

于 2013-03-07T15:48:19.083 回答
9

这篇文章有点旧,但我为解决这个错误所做的一件事是包装查询,然后像这样在外面应用订单。

SELECT COL
FROM (
   SELECT DISTINCT COL, ORDER_BY_COL
   FROM TABLE
   // ADD JOINS, WHERE CLAUSES, ETC.
) 
ORDER BY ORDER_BY_COL;

希望这可以帮助 :)

于 2019-04-04T13:33:57.340 回答
0

DISTINCT在具有 的查询中使用时,ORDER BY您必须选择您在ORDER BY语句中使用的所有列:

SELECT DISTINCT share.rooms.floors.floorOrder, share.rooms.roomNumber,
         share.rooms.firstEffectiveAt, share.shareNumber, share.sharePercent
...
ORDER BY share.rooms.floors.floorOrder, share.rooms.roomNumber,
         share.rooms.firstEffectiveAt, share.shareNumber, share.sharePercent
于 2022-02-09T11:15:25.023 回答