在我的SQL Server 2008中,我有两个表。
现在我想让所有未列入黑名单的用户。 只是不像我想要的那样工作
SELECT A.ID, B.ID FROM Users AS A INNER JOIN Blacklist AS B ON
A.ID != B.ID
有人可以帮忙吗?
答案 0 :(得分:1)
你想要的是反连接,如下所示:
SELECT A.ID, B.ID FROM Users AS A LEFT JOIN Blacklist AS B ON
A.ID = B.ID
WHERE B.ID IS NULL
也就是说,我们执行连接,然后在WHERE
子句中应用一个过滤器来消除连接成功的行。
您的原始查询不起作用(假设Blacklist
中有多行,并且它们的ID
值不同),因为 any {{ 1}} ID
中的值,我们可以在A
中找到与它不匹配的 a 行 - 即使还一行确实匹配它。
答案 1 :(得分:1)
如果您希望它不在黑名单中,您将无法从选择语句中的黑名单中选择任何数据
SELECT A.*
FROM Users A
Where A.ID NOT IN (Select Id From Blacklist )
如果您愿意,请详细了解Subqueries with NOT IN
答案 2 :(得分:0)
SELECT *
From Users
WHERE ID NOT IN (SELECT ID From BlackListedUsers)
那应该选择黑名单表中没有的所有内容。