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
WHEREmệnh đề khác vớiIS NULL/IS NOT NULLsẽ thực hiện bất kỳLEFT JOINnà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 BYlà để 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 BYcũngORDER BYkế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.