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.