【问题标题】:Extension of question many to many relationships in same table在同一张表中扩展问题多对多关系
【发布时间】:2009-03-13 17:22:49
【问题描述】:

我有一个表,它包含 4 个字段

身份证|医院|医生|病人 1 A D1 P11 2 B D6 P61 3 A D2 P21 4 A D1 P12 5 B D7 P71 6 B D6 P62 7 B D6 P63

医生是医院独有的。他们不在其他医院工作。患者对于他们不拜访任何其他医生的医生来说是独一无二的。每家医院都有多名医生。

如果您观察到每个医生有多个患者。

现在的问题是:我怎样才能得到与每个医生相关的“只有一个病人”。它可以是记录中的任何患者。

我期待看到这样的事情

医院医生病人 A D1 P11 A D2 P21 B D6 P61 B D7 P71

我得到的答案是 select Hospital,doctor, max(patient) from table GROUP BY Hospital,Doctor ORDER BY Hospital,Doctor;

如何获取上表中唯一的 id,例如。

id 医院 医生 病人 1 A D1 P11 3 A D2 P21 2 B D6 P61 5 B D7 P71

很抱歉重新发布这个问题。

【问题讨论】:

标签: sql mysql


【解决方案1】:

尝试类似:

select Id,Hospital,Doctor,Patient
  from table
  where Id in (select max(t.Id) from table t group by t.Hospital,t.Doctor)
  order by Hospital,Doctor;

【讨论】:

  • 您的回答准确而简短。谢谢
【解决方案2】:
SELECT  m.*
FROM    (
        SELECT  (
                SELECT  id
                FROM    mytable mi
                WHERE   mi.hospital = md.hospital
                        AND mi.doctor = md.doctor
                LIMIT 1
                ) AS first_patient
        FROM    (
                SELECT  DISTINCT hospital, doctor
                FROM    mytable
                ) md
        ) mo, mytable m
WHERE   m.id = mo.first_patient

【讨论】:

  • 这个脚本说在 SELECT (SELECT id FROM mytable mi WHERE mi.hospital = md.hospital AND mi.doctor = md.doctor LIMIT 1) AS first_patient 处缺少右括号
【解决方案3】:

您可能会考虑将事物分成三个表:Hospitals(使用主键 id 和 Hospital 字段)、Doctors(使用其他 PK、医院的外键和 Doctor 字段)和 Patients(使用其他 PK、医生的外键和患者字段)。那么您的陈述将类似于:

SELECT H.Id, H.Hospital, D.Doctor, Max(P.Patient)
FROM Hospitals H
INNER JOIN Doctors D ON H.Hospital = D.Hospital
INNER JOIN Patients P ON D.Doctor = P.Doctor
ORDER BY Hospital, Doctor

【讨论】:

  • 我没有控制表。
  • 好的,那么您将不得不使用其他答案。
猜你喜欢
  • 2015-11-12
  • 2012-08-27
  • 2020-09-09
  • 2013-02-17
  • 2021-07-18
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多