Anscheinend wollen Sie einen Anti-Join , d.h. Sie müssen zunächst feststellen, welche Benutzerkennungen IsFinal = 1
haben , und verwenden Sie dann diese Ergebnismenge, um alle Benutzer-IDs nicht zurückzugeben in dieser Liste.
Es gibt verschiedene Möglichkeiten, einen Anti-Join zu implementieren.
-
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;
Es kann vorkommen, dass sie in Ihrer Datenbank gleich effizient sind, aber es kann trotzdem eine gute Idee sein, sie alle zu testen, um zumindest zu vermeiden, dass am Ende einer schlechter abschneidet als die anderen.