当前位置: 首页 > 面试题库 >

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

傅振濂
2023-03-14
问题内容

我的表是:

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

has_disease

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

以上数据的答案是Jim and 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

通过完整的剂量列表比较2组患者,并将pid保留为相同的剂量列表,但不同的pid



 类似资料:
  • 问题内容: 我有一张桌子,像这样: 我想选择具有相同基因座和染色体的所有行。例如,第3行和第4行。一次可能有2个以上,并且它们可能不是按顺序排列的。 我尝试了这个: 但是,即使重复,它总是返回第3行,从不返回第4行。我想我缺少明显而简单的东西,但我茫然。 有人可以帮忙吗? 问题答案: 您需要了解,当您在查询中包含内容时,您是在告诉SQL合并行。您将为每个唯一值获得一行。在随后过滤这些组。通常,您可

  • 问题内容: 我不知道该如何称呼这个问题。如果你有更好的话请指正我。 我有两个表,用户和帖子。 使用者: 帖子: 现在,我要列出“最活跃”的用户-写得最多的用户。具体来说,我想要结果。 我可以得到预期的结果。但是,如果某些用户拥有相同数量的帖子,则排名可能不会是“ 公平的 ”。 例如,我可能会得到如下结果: 在这里,实际上还有几个拥有帖子的用户。 因此,这可能不是确切的结果。如何获得包含帖子的额外用

  • 问题内容: 该主题的解决方案使我不知所措。 我有一个看起来像的表格(除与我的问题无关的其他字段之外): 名称,卡号,会员类型 现在,我想要一个显示卡号和成员类型相同的行的视图。这两个字段都是整数。名称为VARCHAR。名称不是唯一的,并且相同的名称也应显示重复的卡号,会员类型。 即,如果下表是表格: 我想要: 只需按卡号排序即可使其对人类有用。 最有效的方法是什么? 问题答案: 由于您提到的名称可

  • exTab 如何使用SQL(与mySQL一起)只返回col1中具有多个相同值、col2中具有多个相同值、但COL3中具有唯一值的行? 例如,在上面的表(exTab)中,val1在col1中出现了4次,对于这4次,val4在col2中出现了3次,但是对于这3次,val7在col3中只出现了一次,所以我想返回这一行(第1行)。考虑到这些条件,第1行将是我希望从此表返回的唯一一行。 我试过和group

  • 问题内容: 让我们考虑下表- 我是一个SQL新手,但是如何返回同时包含ID 2和ID 4的分数?因此,由于ID 2和ID 4中均包含该字符,因此应该返回100 问题答案: 这是“组内集”查询的示例。我建议使用该子句进行聚合,因为这是最灵活的方法。 这是在按分数汇总。然后,子句()的第一部分是计算每个分数有多少个“ 2”。第二个是计算多少个“ 4”。仅返回分数为“ 2”和“ 4”的分数。

  • 问题内容: 说有这样的表: 字段名称很容易解释。我想选择同时具有1和3 的,因此在此示例中仅。我想到了类似的 清单,之后我想列出该组中存在的。我怎么做? 问题答案: 如果没有任何唯一约束,请尝试: 如果仅尝试检测两个值,请使用此子句: 如果post_id和tag_id都具有唯一约束,那么这也应该起作用: