从同一个表中获取一对多关系中的数据

时间:2009-03-05 22:03:41

标签: sql

我有一个表,它包含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

如何在上表中获取ID,如:

id Hospital Doctor Patient
 1   A       D1      P11
 3   A       D2      P21
 2   B       D6      P61
 5   B       D7      P71

提前致谢

3 个答案:

答案 0 :(得分:6)

像这样:

SELECT Hospital, Doctor, MAX(Patient)
FROM table
GROUP BY Hospital, Doctor
ORDER BY Hospital, Doctor

既然你说你不关心哪个病人,我只使用了MAX,但你也可以使用MIN或其他一些分组功能。

答案 1 :(得分:1)

我不禁要问这不应该是三张桌子,而不是一张桌子。当然,医院与医生之间存在1:m的关系,医生与患者之间的关系为1:m。每个实体必须具有其他属性。为什么所有这些都在一张桌子里?我会将它标准化。

我不明白P61或P63在医院B的D6应该是首选的要求,但我相信你会这样做。

答案 2 :(得分:1)

鉴于上表,Eric已回答了这个问题。

如果您可以控制数据库设计:

如果医生只能在一家医院工作,那么Doc​​tor表应该有一个HospitalId。 如果患者真的只能有一位医生,那么患者表应该有一个DoctorId。

患者>>医生>>医院。

然后这将完全取消这个表,这看起来支持医生,医院和患者之间的多对多关系,你说这是不可能的。但是,您可能希望保持灵活性。