J'ai une requête qui ressemble à ceci:
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
Ce qui entraîne l'exception suivante:
Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression
Si je supprime le mot clé DISTINCT, la requête s'exécute sans problème. Si je supprime la clause order by, la requête s'exécute sans problème. Malheureusement, je n'arrive pas à obtenir le jeu de résultats commandé sans doublons.
Vous essayez d'ordonner votre résultat avec des colonnes qui ne sont pas calculées. Ce ne serait pas un problème si vous n'aviez pas le DISTINCT
, mais puisque votre requête est essentiellement regroupée par share.rooms
colonne, comment peut-il ordonner ce jeu de résultats avec d'autres colonnes pouvant avoir plusieurs valeurs pour le même share.rooms
une?
Ce message est un peu ancien, mais une chose que j'ai faite pour contourner cette erreur est d'envelopper la requête et d'appliquer simplement la commande à l'extérieur comme ça.
SELECT COL
FROM (
SELECT DISTINCT COL, ORDER_BY_COL
FROM TABLE
// ADD JOINS, WHERE CLAUSES, ETC.
)
ORDER BY ORDER_BY_COL;
J'espère que cela t'aides :)