在同一个表中扩展问题多对多关系

时间:2009-03-13 17:22:49

标签: sql mysql

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

Id|Hospital|   Doctor|patient

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

医生是医院独有的。他们不在其他医院工作。患者是医生所独有的,他们不会去看任何其他医生。每家医院都有多名医生。

如果您发现每位医生都有多名患者。

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

我期待看到像这样的事情

 Hospital Doctor Patient
  A       D1      P11

  A       D2      P21

  B       D6      P61

  B       D7      P71

我得到了答案 从表BY BY医院,医生ORDER BY医院,医生选择医院,医生,max(患者);

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

id Hospital Doctor Patient
 1   A       D1      P11

 3   A       D2      P21

 2   B       D6      P61

 5   B       D7      P71

我很抱歉转发这个问题。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你可能会把事情分成三个表:医院(有主键ID和医院字段),医生(还有其他PK,医院的外键和医生字段)和患者(还有其他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