Có vẻ như bạn muốn chống tham gia , tức là trước tiên bạn cần thiết lập ID người dùng nào có IsFinal = 1
, sau đó sử dụng tập hợp kết quả đó để trả về tất cả các ID người dùng not trong danh sách đó.
Có nhiều cách khác nhau để triển khai chống tham gia.
-
NOT IN
:SELECT * FROM atable WHERE UserID NOT IN ( SELECT UserID FROM atable WHERE IsFinal = 1 );
-
NOT EXISTS
:SELECT * FROM atable t1 WHERE NOT EXISTS ( SELECT * FROM atable t2 WHERE t1.UserID = t2.UserID AND t2.IsFinal = 1 );
-
LEFT JOIN
+WHERE IS NULL
:a)
SELECT * FROM atable t1 LEFT JOIN ( SELECT * FROM atable WHERE IsFinal = 1 ) t2 ON t1.UserID = t2.UserID WHERE t2.UserID IS NULL;
b)
SELECT * FROM atable t1 LEFT JOIN atable t2 ON t1.UserID = t2.UserID AND t2.IsFinal = 1 WHERE t2.UserID IS NULL;
Có thể xảy ra trường hợp chúng sẽ hoạt động hiệu quả như nhau trong cơ sở dữ liệu của bạn, nhưng vẫn có thể là ý kiến hay khi kiểm tra từng cái để ít nhất tránh kết thúc với một cái hoạt động kém hơn những cái khác.