我有一个表,它包含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
提前致谢
答案 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)
如果您可以控制数据库设计:
如果医生只能在一家医院工作,那么Doctor表应该有一个HospitalId。 如果患者真的只能有一位医生,那么患者表应该有一个DoctorId。
患者>>医生>>医院。
然后这将完全取消这个表,这看起来支持医生,医院和患者之间的多对多关系,你说这是不可能的。但是,您可能希望保持灵活性。