2016-08-01 3 views
2

Oracle 10gを使用していますが、セット演算子を使用してクエリの他のテーブルに表示されない行を選択しようとしています。SQLセット演算子 - 異なる列のテーブルから行を選択する

私はこれらの行はjob_historyテーブルに表示されないようなemployeeテーブルからidlast_namefirst_name列を選択しようとしています。

これらの2つのテーブルの唯一の共通の列はid列です。しかし、私も名前を表示したい。私が試してみました

:希望の結果が得られていない

SELECT 
    id, last_name, first_name 
FROM 
    employees 

MINUS 

SELECT 
    id, TO_CHAR(null), TO_CHAR(null) 
FROM 
    job_history; 

。しかし

、私は私が使用して、従業員表から名前を表示したくなかった場合:

SELECT id FROM employees 
MINUS 
SELECT id FROM job_history; 

私の結果の半分を与える、その以外の私は、従業員表から名前をしたいです。

アドバイスはありますか?

答えて

2

SELECT e.id, e.last_name, e.first_name 
FROM employees e LEFT JOIN job_history jh 
ON e.ID = jh.ID 
WHERE jh.some_other_column IS NULL; 

のようなあなたにも LEFT JOINを試すことができます NOT IN

SELECT id, last_name, first_name FROM employees 
WHERE ID NOT IN (SELECT id FROM job_history); 

などを使用することはできませんこれは最も賢明な答えのようです。
+0

これは私にとって正しい結果をもたらしました。 'x on x.id = a.id'についての説明をお願いしますか?私はこの構文に遭遇したことはありません。 – ethane

+0

はい..もちろんxは副選択を使って作成されたテーブルのエイリアスです。x.id = a.idはテーブルの従業員(エイリアスa)と副選択テーブルの間の結合句です。希望そうでなければ再び私に尋ねてください – scaisEdge

+0

素晴らしい!それはそれをクリアした、ありがとう。 – ethane

4

なぜあなただ​​けの選択結果

select a.id, a.last_name, a.first_name 
from employees a 
inner join ( 
SELECT id FROM employees 
MINUS 
SELECT id FROM job_history) x on x.id = a.id 
+1

に参加するあなたは、内側を使用することができます –

+0

私は結果を生成する簡単な方法があることを知っていますが、私はセット演算子を使用する方法を理解しようとしています。 – ethane

+0

job_history.idカラムにNULLがある場合、NOT INソリューションは間違った結果を生成します。この列は、わからないものではないはずですが、最初にチェックする必要があります。 – mathguy

関連する問題