我有一个包含两列的数据集:
source target
Michael Scott Kelly Kapoor
Jim Halpert Pam Beasley
Jim Halpert Pam Beasley
Dwight Schrute Angela
Angela Dwight Schrute
Erin Meredith
Erin Meredith
Kevin Malone Stanley Hudson
Kevin Malone Ryan Howard
Pam Beasley Oscar
我想找到包含至少一个成员的行,这些成员具有至少两个不同成员的多对。因此,最终结果应该返回:
source target
Jim Halpert Pam Beasley
Jim Halpert Pam Beasley
Kevin Malone Stanley Hudson
Kevin Malone Ryan Howard
Pam Beasley Oscar
Michael --> Kelly
已删除,因为它们没有任何其他链接
Dwight Schrute --> Angela
和Angela --> Dwight Schrute
已删除,因为虽然有多个链接,但链接位于相同的成员之间。
Erin --> Meredith
和Erin --> Meredith
被删除了,因为链接又在同一个成员之间(尽管方向相同)。
我知道如何找到涉及相同成员的不同链接:
select source
,target
from dbo.networktest
group by source, target
having count(*) > 1
union
select b.source
,b.target
from dbo.networktest a
left outer join dbo.networktest b on a.source = b.target and a.target = b.source
where b.source is not null and b.target is not null
我如何更改(或废弃/重建)以实现我的目标?感谢您对所有人的见解!如果我能让我的问题更清楚,请告诉我。
答案 0 :(得分:3)
我认为exists
确实需要:
select nt.*
from networktest nt
where exists (select 1
from networktest nt2
where nt2.source in (nt.source, nt.target) and
nt2.target not in (nt.source, nt.target)
) or
exists (select 1
from networktest nt2
where nt2.target in (nt.source, nt.target) and
nt2.source not in (nt.source, nt.target)
);