我有一个场景,我必须在每个组中找到连接到同一组中的所有其他id的id。所以基本上我们必须分开对待每一组。
下表中,组A有3个id 1、2、3。1与2和3都相连,2与1和3都相连,但3与1和2都不相连。所以1和2应该输出同样,在组B中,只有5连接到组B中的所有其他id,即4和6,因此5应该输出. 与C组类似,应为8, D组不输出任何记录。
因此,select语句的输出应该是1,2,5,8。
<表类>
GRP
ID
CONNECTED_TO
tbody><<tr>12 1 3 2 3 2 1 3 5 B4 5 B5 4 B5 6 B6 4 C7 21 C7 25 C8 7 D9 31日 D10 35 D11 37 表类>
您可以使用count
和count(distinct)
函数如下:
select id
from tbl T
where connected_to in
(
select id from tbl T2
where T2.grp = T.grp
)
group by grp, id
having count(connected_to) =
(
select count(distinct D.id) - 1
from tbl D
where T.grp = D.grp
)
当count(connected_to) group by grp, id
等于具有相同grp的count(distinct id) - 1
时,表示该ID与所有其他ID连接。