デバッグ時に自分で快適に使うために、ナチュラルジョインの代わりに内部ジョインを使用することをお勧めします。
その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'
次のように何らかの形でクエリを言い換えた後、あなたは、私がOR
になります賭けるwhere
句で使用する必要があります論理演算子に明確見解を持っています。 (詳細は、与えられた後)
EDIT
は「SA_MAN」と「SA_REP」JOB_IDの両方でスタッフを採用する部署を一覧表示するには、あなたが1回、2回、従業員と部署テーブルに参加する必要がありフィルタjob_id='SA_MAN'
と1回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