检查如果A列中的数据存在于B列中

时间:2014-12-09 18:09:24

标签: sql sql-server join exists

基本上这就是我所拥有的:

insert into A values(1689, 1709);
insert into A values(1709, 1689);
insert into A values(1782, 1709);
insert into A values(1911, 1247);
insert into A values(1247, 1468);
insert into A values(1641, 1468);
insert into A values(1316, 1304);
insert into A values(1501, 1934);
insert into A values(1934, 1501);
insert into A values(1025, 1101);

如您所见,此处有2个值可供使用。我们称他们为a和b(a,b)。

我需要创建的是一个查询,条件是column1中不得存在b。

我对此有点新意,所以在我尝试的很多事情中,这看起来就像是最接近的答案,但它并没有完成这项工作。

SELECT 
    a.*
FROM 
    A as a
LEFT JOIN 
    B AS b ON b.column = a.column
WHERE 
    B.column IS NULL

3 个答案:

答案 0 :(得分:2)

假设我理解您的问题,一种选择是使用NOT EXISTS

select col2
from A A1
where not exists (
  select 1
  from A A2
  where A1.col2 = A2.col1
)

这将返回col2中不存在的所有col1条记录。

答案 1 :(得分:1)

SELECT COL1, COL2 FROM A WHERE
COL1 NOT IN (SELECT DISTINCT COL2 FROM A)

答案 2 :(得分:0)

您的原始查询有正确的想法,名称与您的描述不符。

select  a1.*
from    A a1
left join A a2
    on  a2.b = a1.a
where a2.b is null;