如何返回数据加入黑名单表?

时间:2012-04-22 22:07:39

标签: sql sql-server sql-server-2008

请查看此声明:

   SELECT TableID FROM Table t1
   INNER JOIN BlackList b ON b.TableID <> t1.TableID

我在想这个语句返回Table表中找不到的Blacklist的所有内容,但它根本没有返回任何内容(0行)。如果我试图返回Table表中未找到的Blacklist内的所有内容,那么最好的方法是什么?我假设你可以这样做:

  SELECT TableID FROM (
    SELECT TableID, CASE WHEN b.TableID IS NULL THEN 1 ELSE 0 END OnBlackList 
    FROM Table t1
      LEFT JOIN Blacklist b ON b.TableID = t1.TableID
    ) tb1
  WHERE tb1.OnBlackList = 0

但我一直在寻找更短,更有效的解决方案。有什么建议吗?

4 个答案:

答案 0 :(得分:5)

SELECT TableID FROM dbo.Table
EXCEPT
SELECT TableID FROM dbo.Blacklist;

答案 1 :(得分:2)

一种基本方法是使用NOT EXISTS

SELECT TableID FROM Table t1
where NOT EXISTS (select * from BlackList b where b.TableID = t1.TableID);

这将选择t1表格中不存在的BlackList中的行。

答案 2 :(得分:1)

SELECT TableT1.TableId FROM TableT1  
LEFT OUTER JOIN BlackList ON  
TableT1.TableID = BlackList.TableID  
where BlackList.TableId IS NULL

我写了上面的内容,但现在我在StackOverflow中找到了之前的问题/答案: How to find rows in one table that have no corresponding row in another table

答案 3 :(得分:0)

此外:

SELECT TableId FROM Table
WHERE TableId NOT IN (SELECT TableID FROM BlackList)

无论您在主select语句中添加哪些列,这都将起作用。