反参加が必要なようです つまり、最初に、どのユーザーIDがIsFinal = 1
であるかを確認する必要があります。 、次にその結果セットを使用して、すべてのユーザーIDを返します そのリストにあります。
アンチジョインを実装するにはさまざまな方法があります。
-
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;
データベース内で同じように効率的になる可能性がありますが、少なくともパフォーマンスが他よりも悪くなることを避けるために、それぞれをテストすることをお勧めします。