Không, điều này là tốt. Đây chỉ là một trong những trường hợp hiếm hoi khi bạn muốn sử dụng DISTINCT
từ khóa để loại bỏ các bản sao.
Trong trường hợp này, điều này được chứng minh bởi thực tế là logic của truy vấn là đúng, mặc dù nó trả về nhiều hơn một hàng. Nhiều khi người ta có thể thấy việc sử dụng DISTINCT
khi thực sự logic của truy vấn là sai.
Ghi chú bên lề:
- bất kỳ bộ lọc nào trên tham chiếu bảng mà bạn đang sử dụng trong
WHERE
mệnh đề khác vớiIS NULL/IS NOT NULL
sẽ thực hiện bất kỳLEFT JOIN
nào trên cùng một tham chiếu bảng này, hãy chuyển sang mộtINNER JOIN
, đối với hành vi của tập kết quả cuối cùng. (xem phần này: https://stackoverflow.com/a/15483895/1291428 ) -
bạn không nên sử dụng
GROUP BY
để mô phỏng tác dụng củaDISTINCT
, vì 2 lý do:1 / Đây không phải là mục đích. Một trong những hiệu ứng của
GROUP BY
là để loại bỏ các bản sao, nhưng mục đích chính của nó là nhóm các hàng theo một bộ tiêu chí nhất định, để áp dụng một số phép tính / phép toán phân tích trên chúng.2 /
GROUP BY
cũngORDER BY
kết quả (trong mysql), không nhất thiết phải như những gì bạn muốn và trong trường hợp đó làm chậm quá trình thực thi. Vui lòng chỉ cần đảm bảo sử dụng thích hợp những gì động cơ đang cung cấp, điều đó luôn tốt hơn theo quan điểm tương thích về sau. (dự đoán rằng những gì bạn đưa vào như đã được cấp thực tế không phải như vậy)
trân trọng.