gpt4 book ai didi

mysql - 如何在 mysql 中选择具有相同值集的列?

转载 作者:可可西里 更新时间:2023-11-01 08:17:10 24 4
gpt4 key购买 nike

我的表是:

patients(pid,name,city)

disease(did,dname)

has_disease(did,pid)

我想列出患有相同疾病集的患者。pid 和 did 分别是患者表和疾病表中的主键,并且是 has_disease 表中的外键。

示例数据:

病人

pid    name   city

1 John X

2 Jim Y

3 Jack Z

疾病

 did     dname

1 Typhoid

2 Malaria

3 ViralFever

有病

 did     pid
1 1
1 2
3 2
1 3
3 3

上述数据的答案是 Jim 和 Jack 因为他们有完全相同的一组疾病 1 和 3,即疟疾和病毒热。我想知道如何在 mysql 中实现它。我尝试使用不存在的关系除法,但它不起作用。

最佳答案

select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids
from patients p
JOIN has_disease hd ON p.pid=hd.pid
JOIN disease d ON d.did=hd.did
GROUP BY p.pid;

查询返回我们的患者和他们的疾病。

SELECT * 
FROM
(select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids
from patients p
JOIN has_disease hd ON p.pid=hd.pid
JOIN disease d ON d.did=hd.did
GROUP BY p.pid) P1
JOIN
(select p.*, GROUP_CONCAT(d.did SEPARATOR ', ') AS all_dids
from patients p
JOIN has_disease hd ON p.pid=hd.pid
JOIN disease d ON d.did=hd.did
GROUP BY p.pid) P2 ON p1.all_dids=p2.all_dids and p1.pid<>p2.pid

通过完整的 dos 列表比较 2 组患者,并留下具有相同 dids 列表但不同 pids 的 pid

关于mysql - 如何在 mysql 中选择具有相同值集的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22653271/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com