2013-03-07 14 views
40

Ho una domanda che sembra qualcosa di simile:Utilizzando la parola chiave DISTINCT causa questo errore: non è un'espressione selezionata

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 

che si traduce nella seguente eccezione:

Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression 

Se rimuovo il Parola chiave DISTINCT, la query viene eseguita senza problemi. Se rimuovo la clausola order by, la query viene eseguita senza problemi. Sfortunatamente, non riesco a ottenere il risultato ordinato senza duplicati.

+1

Grazie a @Lamak per la risposta. Non mi è chiaro perché DISTINCT induca il db a ignorare le altre colonne, in quanto non le ignora senza il DISTINCT. Tuttavia, dato che è importante, come ottengo il set di risultati liberi ordinato e duplicato? – Ken

+2

allora come vuoi che siano ordinati ?. Se vuoi risultati duplicati gratuiti per la colonna 'share.rooms', devi capire che dal momento che la stessa stanza ** potrebbe ** avere valori diversi per' floorOrder' o 'roomNumber' o qualsiasi altra colonna, come vuoi da ordinare ?, dal valore minimo di quelli ?, il massimo ?. – Lamak

+0

Vedo ora. Grazie ancora. – Ken

risposta

65

Si sta tentando di ordinare il risultato con colonne non calcolate. Questo non sarebbe un problema se non avessi il DISTINCT lì, ma dal momento che la tua query è fondamentalmente il raggruppamento solo dalla colonna share.rooms, come può ordinare quel set di risultati con altre colonne che possono avere più valori per lo stesso share.rooms?

Problemi correlati