表中没有ID的表

时间:2013-12-02 14:09:10

标签: sql sql-server select

在我的SQL Server 2008中,我有两个表。

  1. 表:具有唯一ID
  2. 的所有类型的用户
  3. 表:ID为
  4. 的黑名单用户

    现在我想让所有未列入黑名单的用户。 只是不像我想要的那样工作

    SELECT A.ID, B.ID FROM Users AS A INNER JOIN Blacklist AS B ON
    A.ID != B.ID
    

    有人可以帮忙吗?

3 个答案:

答案 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)

那应该选择黑名单表中没有的所有内容。