MySQL thiếu tính năng để cho phép này trong một đi
Ví dụ: DENSE_RANK
chức năng cửa sổ, hoặc TOP..WITH TIES
Vì vậy, mà không cần sử dụng một bảng tạm thời hoặc các câu lệnh IF (yêu cầu một thủ tục lưu sẵn trong MySQL anyway), sau đó lọc nó trên máy khách với giá trị ưu tiên thấp nhất. Tức là, hãy tiêu thụ hàng cho đến khi giá trị thay đổi
SELECT *, 1 AS priority FROM products WHERE language = 1
UNION ALL
SELECT *, 2 AS priority FROM products WHERE language = 2 AND country = 1
UNION ALL
SELECT *, 3 AS priority FROM products WHERE language = 2 AND country = 2
ORDER BY priority;
Điều này sẽ loại bỏ khứ hồi tới máy chủ MySQL, ngay cả khi không lý tưởng. Và nó cũng tránh đánh giá lại các CHỌN trước đó trong các mệnh đề EXISTS
Cột nào là '*'? – Kermit
Đây không phải là một truy vấn trong MySQL không may: bạn mong đợi gì để thoát khỏi nó – gbn
Tôi nghĩ bạn có thể nhận được kết quả "hợp lý" mong muốn với ORDER – lvil