• 締切済み

複数のPKを持つテーブル同士の結合について

以下のような2つのPKを持つテーブル同士で、お互いに存在しないPKのデータを抽出するときのSQLを教えて下さい。 以下のデータの場合、テーブルAではCODE_1がAAAAAのデータ、テーブルBではCODE_1がCCCCCのデータのことを指します。 [テーブルA] CODE_1 CODE_2 ----- --- AAAAA 123 BBBBB 123 [テーブルB] CODE_1 CODE_2 ----- --- BBBBB 123 CCCCC 123 PKがCODE_1だけの場合は、 select distinct テーブルA.CODE_1 from テーブルA,テーブルB where テーブルA.CODE_1 not in ( select テーブルA.CODE_1 from テーブルA,テーブルB where テーブルA.CODE_1 = テーブルB.CODE_1) で、AAAAAが抽出できるとこまでは分かったんですが、複数のPKになったらいきなり分からなくなってしまいました。 どうかよろしくお願いします。

みんなの回答

回答No.1

oracleは、次のような感じで、複数要素のin条件が書けます。 where (a,b,c) in ((1,2,3),(4,5,6)) where (a,b,c) in (select A,B,C from hoge) なので、要素が増えても支障はありません。 ただし、今使われているSQLは、合理的でないような気がします。 素直に、 select code_1 from A where exists(select 1 from B where A.code_1=B.code_1) union select code_1 from B where exists(select 1 from A where B.code_1=A.code_1) ; とかで良いように思いますが。

関連するQ&A