只要在另一个表T-SQL中不存在,就从一个表中检索记录

时间:2008-11-11 12:39:12

标签: sql sql-server

  

可能重复:
  What's the difference between NOT EXISTS vs. NOT IN vs. LEFT JOIN WHERE IS NULL?

如果表A中的表中的键不存在,我需要查询将从表A中检索记录的查询。

任何帮助将不胜感激。

由于

6 个答案:

答案 0 :(得分:8)

select a.* 
from
    tableA a
    left join tableB b
        ON a.id = b.id
where
    b.id is null

答案 1 :(得分:4)

SELECT *
FROM A
WHERE ID NOT IN
     (SELECT ID FROM B)

答案 2 :(得分:4)

如果密钥包含多个列,则上述解决方案都不起作用。

如果表格有复合主键,则必须使用类似下面的“NOT EXISTS”子句。

SELECT * 
  FROM TableA AS a 
 WHERE NOT EXISTS (
                   SELECT * 
                     FROM TableB b 
                    WHERE b.id1 = a.id1 
                          AND b.id2 = a.id2 
                          AND b.id3 = a.id3
                  );

答案 3 :(得分:2)

使用左连接。数据库尝试使用id字段将数据集从TableB映射到TableA。如果TableB中没有可用的拟合数据集,则TableB数据变为NULL。现在您只需要检查TableB.id是否为NULL。

SELECT TableA.* FROM TableA LEFT JOIN TableB ON TableA.id = TableB.id WHERE TableB.id IS NULL

答案 4 :(得分:0)

假设: TableA的Id = Id TableB的Id = Id

select * from TableA ta where ta.Id not in (select Id from TableB)

答案 5 :(得分:0)

SELECT * FROM TableA
WHERE NOT Exists(SELECT * FROM TableB WHERE id=TableA.id)

也有效,而且几乎是自我记录......