Det ser ud til, at du vil have en anti-join , dvs. du skal først fastslå, hvilke bruger-id'er der har IsFinal = 1 , og brug derefter dette resultatsæt til at returnere alle bruger-id'er ikke på den liste.
Der er forskellige måder at implementere en anti-join på.
-
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;
Det kan ske, at de vil være lige så effektive i din database, men det kan stadig være en god idé at teste hver af dem for i det mindste at undgå at ende med en, der klarer sig dårligere end de andre.