爲了您在調試時的舒適感,我建議您使用內部連接而不是自然連接。
where
子句令人困惑,如果不是完全錯誤的話,因爲您沒有清楚應該過濾哪張表'JOB_ID
'。使用內部連接,爲表提供別名,並在where子句中引用這些別名。
select distinct DEPARTMENT_NAME, CITY, COUNTRY_NAME
from OEHR_DEPARTMENTS t1
join OEHR_EMPLOYEES t2
on ...
join OEHR_LOCATIONS t3
on ...
join OEHR_COUNTRIES t4
on ...
where tn.JOB_ID = 'SA_MAN' AND tm.JOB_ID = 'SA_REP'
莫名其妙地改寫查詢這樣後,你必須對你有where
條款,我敢打賭,將是一個OR
在使用邏輯運算符一個更清晰的視野。
EDIT(被賦予了更多的細節後)
要列出聘用人員與既有「SA_MAN」和「SA_REP」 JOB_ID部門,你有加入與職工的部門表兩次,一次過濾器job_id='SA_MAN'
和job_id='SA_REP'
select distinct DEPARTMENT_NAME, CITY, COUNTRY_NAME
from OEHR_DEPARTMENTS t1
join OEHR_EMPLOYEES t2
on t1.department_id = t2.department_id --guessing column names
join OEHR_EMPLOYEES t3
on t1.department_id = t3.department_id --guessing column names
join OEHR_LOCATIONS t4
on t1.location_id = t4.location_id --guessing column names
join OEHR_COUNTRIES t5
on t4.country_id = t5.country_id --guessing column names
where t2.job_id = 'SA_MAN' and t3.job_id = 'SA_REP'
order by 1, 2, 3
檢查您的where語句。你已經完成了自然連接,它應該工作正常(相信無論表名是什麼)。嘗試提及它應該過濾的特定表。 – Prajwal