Zdá se, že chcete anti-join , tj. nejprve musíte určit, která uživatelská ID mají IsFinal = 1 , pak použijte tuto sadu výsledků k vrácení všech ID uživatelů ne v tomto seznamu.
Anti-join lze implementovat různými způsoby.
-
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;
Může se tak stát, že budou ve vaší databázi stejně výkonné, ale přesto může být dobrý nápad otestovat každý z nich, abyste se alespoň vyhnuli tomu, že skončí s tím, který má horší výkon než ostatní.