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

标签 mysql sql

我的表是:

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/

相关文章:

php - 从mysql拉数据到下拉框而不是数据,没有值出现

python - 在查询 Postgres 函数中附加单引号?

MySQL SELECT MAX of SUM() 值

sql - 日期不能是将来的 SQL

sql - 选择以字符串形式存储在字符串中的邮政编码(配置单元)

java - 启动时的 JPA 自定义脚本

mysql - 在 Jquery Mobile 中更改 div 的内容

mysql - 有没有办法优化这个更新查询?

mysql - Azure Database for MySQL 的客户端证书和 key

python - MySql read_sql python 查询,带变量@