Подтвердить что ты не робот

Использование ключевого слова DISTINCT вызывает эту ошибку: не выражение SELECTed

У меня есть запрос, который выглядит примерно так:

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, запрос выполняется без проблем. К сожалению, я не могу получить упорядоченный набор результатов без дубликатов.

4b9b3361

Ответ 1

Вы пытаетесь заказать свой результат со столбцами, которые не вычисляются. Это не было бы проблемой, если бы у вас не было DISTINCT, но поскольку ваш запрос в основном группируется только в столбце share.rooms, как он может упорядочить этот набор результатов с другими столбцами, которые могут иметь несколько значений для тот же share.rooms один?

Ответ 2

Это сообщение немного старое, но я решил обойти эту ошибку, обернув запрос и просто применив порядок снаружи, вот так.

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

Надеюсь это поможет :)