用于从“不在”状态的两个表中获取数据的SQL查询

时间:2013-06-05 14:00:18

标签: sql sql-server sql-server-2008 tsql join

我有2个表,Table1和Table2,其中两个表中的2列相同

更新:Table2.col1的类型与Table2.col1相同,Table1.col2与Table2.col2相同

尝试获取table2.col1不在table2.col1和table1.col2中而不在table2.col2中的数据,这是我的查询。

select * from Table1 
    where Table1.col1 not in (select Table2.col1 from Table2)
      and Table1.col2 not in (select Table2.col2 from Table2)

想知道更好的方法还是这是正确的?

3 个答案:

答案 0 :(得分:2)

使用LEFT JOIN:

SELECT Table1.* 
FROM Table1 
LEFT JOIN Table2
  ON Table1.col1 = Table2.col1
  AND Table1.col2 = Table2.col2
WHERE Table2.col1 IS NULL

答案 1 :(得分:2)

此查询应该完成这项工作,我根据您的查询运行了一个简单的测试,但它没有产生所需的结果

SELECT *
FROM Table1 t1
LEFT JOIN Table2 t2
    ON t1.col1 = t2.col1 AND t1.col2 = t2.col2
WHERE t2.col1 IS NULL AND t2.col2 IS NULL

鉴于此

CREATE TABLE Table1
(
colA    VarChar(50),
col1    Int,
col2    Int
)

CREATE TABLE Table2
(
colB    VarChar(50),
col1    Int,
col2    Int
)

INSERT Table1
VALUES ('A', 1, 1),
        ('B', 1, 2),
        ('C', 2, 1)

INSERT Table2
VALUES ('X', 1, 1),
        ('Y', 2, 1),
        ('Z', 2, 2)

如果我理解你的问题,我们应该得到 B | 1 | 2

答案 2 :(得分:0)

如果此查询有任何问题,请发表评论:

select * from table1
where not exists (select 1 from table2 where table2.col1 = table1.col1 and table2.col2 = table1.col2)