こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

SQLでの条件分岐

現在SQLの勉強をしているのですが、条件分岐の方法がわかりません。

全社員を登録したテーブルAと一部社員のみが登録されたテーブルBがあり、両テーブルを外部結合し、Bに登録されているかどうかでフラグを設定しています。
select A.*, B.*, NVL2(A.EMP_NO,'1','0') flag from A
left outer join B
on A.EMP_NO = B.EMP_NO
and A.EMP_NAME = B.EMP_NAME

・上記SQLで設定したフラグの値をもとに、(1)Aのみに登録された社員、(2)Bのみに登録された社員、(3)両テーブルに登録された社員を出すためにはどのようにすれば宜しいでしょうか。
(2)、(3)に関しては、上記パターンならテーブルそのものを出せば済む話なのですが、今後のためにフラグから判定する方法でご教授お願いいたします。

投稿日時 - 2019-09-12 23:54:45

QNo.9656207

すぐに回答ほしいです

質問者が選んだベストアンサー

動作確認していないので、間違っている場合はごめんなさい。

EXISTS/NOT EXISTSを使用して、Aのみ,Bのみ,両方を個別に抽出し、UNIONで結合するのはどうですか?
※フラグ値とソート順はよしなに

-- Aのみに存在
SELECT A.EMP_NO, A.EMP_NAME, 'A' AS FLAG
FROM A
WHERE NOT EXISTS
(SELECT * FROM B
WHERE B.EMP_NO = A.EMP_NO
AND B.EMP_NAME = A.EMP_NAME
)
UNION
-- Bのみに存在
SELECT B.EMP_NO, B.EMP_NAME, 'B' AS FLAG
FROM B
WHERE NOT EXISTS
(SELECT * FROM A
WHERE A.EMP_NO = B.EMP_NO
AND A.EMP_NAME = B.EMP_NAME
)
UNION
-- 両方に存在
SELECT A.EMP_NO, A.EMP_NAME, 'W' AS FLAG
FROM A
WHERE EXISTS
(SELECT * FROM B
WHERE B.EMP_NO = A.EMP_NO
AND B.EMP_NAME = A.EMP_NAME
)

投稿日時 - 2019-09-13 14:04:30

ANo.1

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)