2012-08-03 63 views
2
Hospital_Visit 
     hid pid HospitalName DoctorId 
     41 1 abc  1 
     42 2 xyx  2 

Patient_Master 
     pid PatientName 
     1  jill 
     2  rosy 
Doctor_Master 
     DoctorID DoctorName 
     1  John 
     2  Jack 
Hospital_Study 
     sid hid exam status 
     1 41 jjj sfvn 
     2 41 fks jdjd 

select Hospital_Visit.Pid,PatientName,DoctorName from Patient_Master 
inner join Hospital_Visit on Hospital_Visit.pid=Patient_Master.pid 
inner join Doctor_Master on Doctor_Master.DoctorID= Hospital_Visit.DoctorID 
inner join Hospital_Study on Hospital_Study.hid=Hospital_Visit.hid 

Pid PatientName DoctorName exam status 
1 Jill   John  jjj sfvn 
2 rosy   John  fks jdjd 

**得到错误的结果

//Correct output i want 
    Pid PatientName DoctorName exam status 
    1 Jill   John  jjj sfvn 
    2 rosy   Jack  fks jdjd 

**

我得到错误的结果在结果repeting医生 名字,因为inner join上Hospital_Visit和Hospital_Study
躲在我怎样才能TAKLE这问题


(DTU编辑 - 在可用的形式当前样本数据):

create table Hospital_Visit(hid int,pid int,HospitalName char(3), DoctorId int) 
insert into Hospital_Visit(hid, pid, HospitalName, DoctorId) values 
     (41, 1, 'abc',  1), 
     (42, 2, 'xyx',  2) 

create table Patient_Master(pid int, PatientName char(4)) 
insert into Patient_Master(pid, PatientName) values 
     (1,  'jill'), 
     (2,  'rosy') 
create table Doctor_Master(DoctorID int, DoctorName char(4)) 
insert into Doctor_Master(DoctorID, DoctorName) values 
     (1,  'John'), 
     (2,  'Jack') 
create table Hospital_Study(sid int, hid int, exam char(3), status char(4)) 
insert into Hospital_Study(sid, hid, exam, status) values 
     (1, 41, 'jjj' ,'sfvn'), 
     (2, 41, 'fks' ,'jdjd') 
+3

内部加入Hospital_Study在Hospital_Study.hid = Hospital_Visit.hid因为这个doctorname正在重复。 – John 2012-08-03 12:53:06

+1

你们的权利约翰什么是我希望从Hospital_Study数据的解决方案 – 2012-08-03 12:54:05

+0

但是在你的输出中没有来自hospital_study – AnandPhadke 2012-08-03 12:55:54

回答

-2

我有一个疑问,你的加入

inner join Hospital_Study on Hospital_Study.hid=Hospital_Visit.hid 

Hospital_Study.hid是外键没错,但Hospital_Visit.hid是主键或者它是一个外键。

如果Hospital_Visit.hid是外键,那么您必须在您的医院主表(Hospital_Master)上添加一个内部联接。

+0

Hospital_Visit.hid是主键,Hospital_Study.hid是外键。 – 2012-08-03 13:02:05

+0

如何在医院的主人中添加更多的内连接? – 2012-08-03 13:04:11

0

利用现在给出的样本数据(revision 4),无法得到您想要的输出。

现在,你的查询返回这样的:

Pid PatientName DoctorName 
1 jill  John 
1 jill  John 

你想要的是这样的:

//Correct output i want 
Pid PatientName DoctorName exam status 
1 Jill   John  jjj sfvn 
2 rosy   Jack  fks jdjd 

...但在Hospital_Study表中的数据不匹配这一点,因为这两个行有hid = 41

Hospital_Study 
    sid hid exam status 
    1 41 jjj sfvn 
    2 41 fks jdjd 

因此,他们都引用的第一行表,属于名为“Jill”的患者。
- >使用这些数据,不可能选择名为“rosy”的患者,因为Hospital_Study表中没有表示玫瑰色访问(hid = 42)的行。

为了得到所需的输出,在Hospital_Study的数据需要像这样:

Hospital_Study 
    sid hid exam status 
    1 41 jjj sfvn 
    2 42 fks jdjd 
     /\ 
     || 
     this is different 

有了这些数据,并从你的问题的确切查询,你会得到这样的结果:

Pid PatientName DoctorName 
1 jill  John 
2 rosy  Jack