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
**
我得错了结果重复医生
由于inner join
隐藏在Hospital_Visit和Hospital_Study上的结果中的名称
我怎样才能解决这个问题
(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')
答案 0 :(得分: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
所以他们都引用了Hospital_Visit
表中的第一行,该表属于名为“Jill”的患者。
- >有了这些数据,就不可能选择名为“玫瑰色”的患者,因为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
答案 1 :(得分:-2)
我对您的加入有疑问
inner join Hospital_Study on Hospital_Study.hid=Hospital_Visit.hid
Hospital_Study.hid是正确的外键,但是Hospital_Visit.hid是主键或是外键。
如果Hospital_Visit.hid是您的外键,那么您必须在医院的主表(Hospital_Master)上再添加一个内部联接。