2014-03-29 115 views
0

我有一些外键的多个表。这里是表格;在SQL Plus中比较两个不同表中的值Oracle

Doctor 
Doctor_id, FirstName, SecondName,etc... 

Hospital 
Hospital_id, Name... 

Job 
Job_id 
fk Doctor_id 
fk Hospital_id 

我试图显示一个在'X'医院工作的医生名单。我将如何运行这个查询?

SELECT FirstName, SecondName 
FROM Doctor, Job, Hospital 
WHERE Hospital.Name = 'HospitalName' AND Job.hospital_id = Hospital.hospital_id; 

我不知道,如果那个特定的查询是正确的,因为它显示了每一个医生(不是在“HospitalName”工作的人。如果这是正确的,比我猜的外键是不是正确的?

在此先感谢。DG

回答

1

你缺少一个连接条件。

SELECT FirstName, SecondName 
FROM Doctor, Job, Hospital 
WHERE Hospital.Name = 'HospitalName' 
AND Job.hospital_id = Hospital.hospital_id 
AND job.Doctor_id = Doctor.doctor_id; 
+0

噢,你是一个拯救生命的人!非常感谢! –

2

你应该学会使用正确的联接语法,然后像这样的失误也少得多像发生LY:

SELECT d.FirstName, d.SecondName 
FROM Doctor d join 
    Job j 
    on d.Doctor_id = j.Doctor_Id join 
    Hospital h 
    on j.hospital_id = h.hospital_id 
WHERE h.Name = 'HospitalName'; 

这也增加为每列表的别名,所以有人阅读查询知道他们来自哪里。