2017-03-04 14 views
0

テーブルの列から複数のレコードを選択する方法は不思議でした。以下のクエリを参照してください。Oracle 11g - テーブルの列から複数のレコードを選択する

SELECT DISTINCT DEPARTMENT_NAME, CITY, COUNTRY_NAME 
FROM OEHR_DEPARTMENTS 
NATURAL JOIN OEHR_EMPLOYEES 
NATURAL JOIN OEHR_LOCATIONS 
NATURAL JOIN OEHR_COUNTRIES 
WHERE JOB_ID = 'SA_MAN' AND JOB_ID = 'SA_REP' 
; 

基本的に、私はあなたがANDを使用する場合しかし、それは唯一のSA_MANなくSA_REPを表示し、私が持っているテーブル列からselect記録にできるようにしたいです。 ORを使用しようとしましたが、選択された行が表示されません。実際にどちらか一方を表示するだけでなく、どちらのジョブIDを選択することができますか。

申し訳ありませんが、これは愚かな質問のように聞こえるかもしれませんが、私はOracle 11g SQLの新機能です。

+0

「where'句を確認してください。あなたは自然な結合をしました、それはうまくいくはずです(テーブル名が与えられても何でも信じています)。それがフィルタリングされるべき特定のテーブルに言及してみてください。 – Prajwal

答えて

0

デバッグ時に自分で快適に使うために、ナチュラルジョインの代わりに内部ジョインを使用することをお勧めします。

その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 
+0

ありがとう、私はこれを試してみましょう。私はまだエラーが発生した場合、もっと詳しく説明します – Axioms

+0

JOB_IDが2つの異なるテーブルから来ることをどうやって知っていますか? – BobC

+0

まだエラーが発生しているようです。 JOB_IDはOEHR_EMPLOYEESというテーブルから来ています。 – Axioms

関連する問題