联接2个表:[A]中的1行与[B]中的多个可能行不匹配

时间:2018-09-05 18:08:58

标签: sql sql-server

给出以下两个数据集:

Table A 
ID      KA      ParentID
1001    1111    2001
1001    1112    2001
1003    1113    2002
1004    1114    2003
1005    NULL    2004

Table B
ID    KA
2001  1111
2001  2222
2002  1113
2003  1114
2004  4444

我如何连接这两个表,以便当A.ParentID和B.ID相同时,仅显示的行不共享相同的KA值? 我在进行左联接时遇到的问题是,它仅与表B中的第一个匹配项匹配。

我期望返回的结果与此类似:

A.ID    B.KA
1001    2222
1005    4444

是否可以使用此代码在逻辑上做一些事情?:

Select A.ID, B.KA
FROM A
LEFT JOIN B
ON A.ParentID = B.ID AND A.KA NOT IN (B.KA)

2 个答案:

答案 0 :(得分:3)

如果我正确理解了您的问题,则需要过滤掉两个表中的ka条记录。如果是这样,这是使用except的一种选择:

select distinct a.id, b.ka
from a 
    join b on a.parentid = b.id 
except
select distinct a.id, b.ka
from a 
    join b on a.parentid = b.id 
where a.ka = b.ka

另一个使用not exists

select distinct a.id, b.ka
from a 
    join b on a.parentid = b.id 
where not exists (
    select 1
    from a a2
    where a2.id = a.id and b.ka = a2.ka)

答案 1 :(得分:0)

我认为这应该可行。

SELECT A.ID, B.KA
FROM A
LEFT JOIN B
ON A.ParentID = B.ID AND A.KA <> B.KA
相关问题