web-dev-qa-db-ja.com

DISTINCTキーワードを使用すると、このエラーが発生します。SELECTされた式ではありません

次のようなクエリがあります。

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句を削除すると、クエリは問題なく実行されます。残念ながら、重複することなく順序付けられた結果セットを取得することはできません。

50
Ken

計算されていない列で結果を並べようとしています。 DISTINCTがなくても問題ありませんが、クエリは基本的にshare.rooms列のみでグループ化されるため、結果セットを他の列と並べ替える方法はありますか同じshare.rooms oneに複数の値がありますか?

82
Lamak

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

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

お役に立てれば :)