给出以下两个数据集:
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)
答案 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