我的表是:
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/