Có cách nào để nhóm theo khóa duy nhất (chính), về cơ bản, đảm bảo rằng các cột khác từ bảng đó sẽ được xác định rõ ràng?GROUP BY chỉ có khóa chính, nhưng chọn các giá trị khác
SELECT myPrimaryKey, otherThing
FROM myTable
GROUP BY myPrimaryKey
Tôi biết rằng tôi có thể thêm các cột khác vào câu lệnh (GROUP BY myPrimaryKey,otherThing
), nhưng tôi đang cố gắng tránh điều đó. Nếu bạn tò mò tại sao, hãy đọc tiếp:
Tôi có một tuyên bố trong đó chủ yếu là làm điều này:
SELECT nodes.node_id, nodes.node_label, COUNT(1)
FROM {a couple of joined tables}
INNER JOIN nodes USING (node_id)
GROUP BY nodes.node_id, nodes.node_label
mà hoạt động tốt, nhưng là một chút chậm trong MySQL. Nếu tôi xóa nodes.node_label
khỏi GROUP BY
, nó chạy nhanh hơn khoảng 10 lần (theo EXPLAIN
, điều này là do một trong các lần gia nhập trước đó bắt đầu sử dụng chỉ mục khi trước đó nó không).
Chúng tôi đang trong quá trình di chuyển sang Postgres, vì vậy tất cả các tuyên bố mới được cho là tương thích với cả MySQL và Postgres khi có thể. Bây giờ trong Postgres, câu lệnh gốc chạy nhanh, nhưng câu lệnh mới (với nhóm bị giảm) sẽ không chạy (vì Postgres là chặt chẽ hơn). Trong trường hợp này, đó là một lỗi sai bởi vì câu lệnh thực sự được xác định rõ ràng.
Có cú pháp nào tôi có thể sử dụng để cho cùng một câu lệnh chạy trong cả hai nền tảng, trong khi cho phép MySQL chỉ sử dụng một cột trong nhóm bằng tốc độ?
'Trong trường hợp này, đó là một lỗi sai vì báo cáo kết quả thực sự nổi defined.' Không không không, MySql chấp nhận weirds điều cho GROUP BY (với kết quả không thể đoán trước), tất cả các DBMS khác buộc bạn phải có được kết quả dự đoán (thường là hữu ích). Để tìm một giải pháp, tôi thà làm việc về quản lý chỉ mục, để tránh sự chậm trễ của MySql! –
@ RaphaëlAlthaus thường là sự thật, nhưng nhóm theo khóa chính (hoặc bất kỳ khóa 'UNIQUE') nào đảm bảo rằng tất cả các giá trị khác trong cùng một bảng đều được xác định rõ. – Dave
nhưng tôi nghi ngờ rằng đó là cách một dbms hoạt động. Tôi không nghĩ rằng truy vấn quét và phân tích cú pháp kiểm tra cho các khóa chính/khóa duy nhất. Điều đó xuất hiện sau (chiến lược tối ưu hóa truy vấn/thực hiện) ... –