2013-03-07 33 views
40

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.

+1

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

+2

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

+0

Tôi thấy bây giờ. Cảm ơn một lần nữa. – Ken

Trả lời

65

Bạn đang cố gắng đặt hàng kết quả của mình với các cột không được tính toán. Đây không phải là vấn đề nếu bạn không có DISTINCT ở đó, nhưng vì truy vấn của bạn về cơ bản chỉ là nhóm theo cột share.rooms, làm cách nào để đặt kết quả đó với các cột khác có thể có nhiều giá trị cho cùng một share.rooms?

Các vấn đề liên quan