2009-03-05 49 views
0

獲取的數據進行一對多的關係船我有一個表,它包含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

在此先感謝

回答

6

篩選:

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

既然你說過你不在乎哪個病人,我只是用了MAX,但是你也可以用MIN或其他一些分組功能。

+0

您應該也可以添加ORDER BY Hospital,Doctor。 – sfossen 2009-03-05 22:13:36

1

我不禁要問,這不應該是三張表,而不是一張。當然醫院和醫生之間有1米的關係,醫生和病人之間有1米的關係。每個實體都必須具有其他屬性。爲什麼所有這些都在一張桌子上?我會規範化它。

我不明白在B醫院應該選擇P61或P63作爲D6的首選,但我相信你會這樣做。

1

埃裏克已經回答了上述問題。

如果你有在數據庫設計器:

如果醫生能在一個醫院只工作,那麼醫生表應該有一個HospitalId。 如果病人真的只能有一位醫生,那麼Patient表應該有一個DoctorId。

患者>>醫生>>醫院。

然後,這將完全消除這張表,這看起來支持醫生,醫院和患者之間的多對多關係,你認爲這是不可能的。然而,你可能想保持靈活性。