Изглежда, че искате против присъединяване т.е. първо трябва да установите кои потребителски идентификатори имат IsFinal = 1
, след което използвайте този набор от резултати, за да върнете всички потребителски идентификатори не в този списък.
Има различни начини за прилагане на антиприсъединяване.
-
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
:а)
SELECT * FROM atable t1 LEFT JOIN ( SELECT * FROM atable WHERE IsFinal = 1 ) t2 ON t1.UserID = t2.UserID WHERE t2.UserID IS NULL;
б)
SELECT * FROM atable t1 LEFT JOIN atable t2 ON t1.UserID = t2.UserID AND t2.IsFinal = 1 WHERE t2.UserID IS NULL;
Може да се случи така, че те ще бъдат еднакво ефективни във вашата база данни, но все пак може да е добра идея да тествате всеки от тях, за да избегнете поне такъв, който работи по-лошо от останалите.