2013-03-07 11 views
40

Mam kwerendy, która wygląda mniej więcej tak:Korzystanie z DISTINCT powoduje ten błąd: nie wybrany wyraz

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 

co skutkuje następującym wyjątkiem:

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

jeśli usunąć Słowo kluczowe DISTINCT, zapytanie działa bez problemu. Jeśli usunę klauzulę order by query uruchomi się bez problemu. Niestety, nie mogę uzyskać uporządkowanego zestawu wyników bez duplikatów.

+1

Dzięki @Lamak za odpowiedź. Nie jest dla mnie jasne, dlaczego DISTINCT powoduje, że db ignoruje pozostałe kolumny, ponieważ nie ignoruje ich bez DISTINCT. Jednak, biorąc pod uwagę, że to ma znaczenie, w jaki sposób uzyskać uporządkowany, zduplikowany zestaw wyników? – Ken

+2

, a następnie w jaki sposób chcesz je zamówić? Jeśli chcesz powielić bezpłatne wyniki dla kolumny 'share.rooms', to musisz zrozumieć, że ponieważ ten sam pokój ** może ** mieć różne wartości dla' floorOrder' lub 'roomNumber' lub dowolnej innej kolumny, jak chcesz je zamówić ?, przez minimalną wartość tych ?, max ?. – Lamak

+0

Widzę teraz. Dzięki jeszcze raz. – Ken

Odpowiedz

65

Próbujesz zamówić wynik z kolumnami, które nie są obliczane. Nie byłoby to problemem, gdyby nie było tam DISTINCT, ale ponieważ zapytanie jest zasadniczo grupowane tylko przez kolumnę share.rooms, w jaki sposób może uporządkować ten zestaw wyników z innymi kolumnami, które mogą mieć wiele wartości dla tego samego share.rooms?

Powiązane problemy