2009-03-05 84 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。

患者>>医生>>医院。

然后,这将完全消除这张表,这看起来支持医生,医院和患者之间的多对多关系,你认为这是不可能的。然而,你可能想保持灵活性。