Sembra che tu voglia un anti-join , ovvero devi prima stabilire quali ID utente hanno IsFinal = 1 , quindi utilizza quel set di risultati per restituire tutti gli ID utente non in quell'elenco.
Esistono vari modi per implementare un'anti-unione.
-
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;
Può succedere che siano ugualmente efficienti nel tuo database, ma potrebbe comunque essere una buona idea testarli almeno per evitare di trovarne uno con prestazioni peggiori degli altri.