web-dev-qa-db-fra.com

L'utilisation du mot clé DISTINCT provoque cette erreur: pas une expression SELECTed

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.

50
Ken

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?

82
Lamak

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 :)

1