Wygląda na to, że chcesz zabronić dołączania , tj. najpierw musisz ustalić, które identyfikatory użytkowników mają IsFinal = 1
, a następnie użyj tego zestawu wyników do zwrócenia wszystkich identyfikatorów użytkowników nie na tej liście.
Istnieje wiele sposobów na zaimplementowanie zabezpieczenia przed sprzężeniem.
-
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;
Może się zdarzyć, że będą one równie wydajne w Twojej bazie danych, ale nadal dobrym pomysłem może być przetestowanie każdego z nich, aby przynajmniej uniknąć uzyskania jednego, który działa gorzej niż inne.