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