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

この投稿は少し古いですが、このエラーを回避するために私がしたことの1つは、クエリをラップして、そのように外側に順序を適用することです。

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 に答える