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

**

inner joinHospital_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')
4

2 に答える 2

0

現在提供されているサンプル データ (リビジョン 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したがって、どちらも「ジル」という名前の患者に属するテーブルの最初の行を参照します。
--> このデータでは、「rosy」という名前の患者を選択することはできません。これは、Hospital_Studyテーブルに rosy の来院 ( 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
于 2012-08-03T14:07:55.293 に答える
-2

私はあなたの参加に疑問を持っています

inner join Hospital_Study on Hospital_Study.hid=Hospital_Visit.hid

Hospital_Study.hid は外部キーですが、Hospital_Visit.hid は主キーまたは外部キーです。

Hospital_Visit.hid が外部キーの場合、Hospital のマスター テーブル (Hospital_Master) に内部結合をもう 1 つ追加する必要があります。

于 2012-08-03T12:59:34.623 に答える