Tôi có một truy vấn mà trông giống như sau:Sử dụng từ khóa DISTINCT gây ra lỗi này: không phải là một biểu hiện chọn
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
Những kết quả trong các ngoại lệ sau đây:
Caused by: org.hibernate.exception.SQLGrammarException: ORA-01791: not a SELECTed expression
Nếu tôi loại bỏ các Từ khóa DISTINCT, truy vấn chạy không có vấn đề. Nếu tôi loại bỏ thứ tự theo mệnh đề, truy vấn sẽ chạy mà không có vấn đề gì. Thật không may, tôi dường như không thể nhận được tập hợp kết quả đã đặt hàng mà không có bản sao.
Cảm ơn @Lamak vì đã trả lời. Nó không phải là rõ ràng với tôi tại sao DISTINCT làm cho db bỏ qua các cột khác, vì nó không bỏ qua chúng mà không có DISTINCT. Tuy nhiên, cho rằng nó quan trọng, làm thế nào để tôi có được kết quả đặt hàng miễn phí, trùng lặp? – Ken
thì bạn muốn chúng được đặt hàng như thế nào ?. Nếu bạn muốn kết quả miễn phí trùng lặp cho cột 'share.rooms', thì bạn cần phải hiểu rằng vì cùng một phòng ** có thể ** có các giá trị khác nhau cho' floorOrder' hoặc 'roomNumber' hoặc bất kỳ cột nào khác, bạn muốn như thế nào chúng được đặt hàng ?, bởi giá trị nhỏ nhất của chúng ?, max ?. – Lamak
Tôi thấy bây giờ. Cảm ơn một lần nữa. – Ken