2017-06-08 6 views
0

値リストがあります。私はそのリストからテーブル内に出現しないすべての値を選択しようとしています。例えばDBテーブルに存在しない値をリストから選択します。

var_nos ['Z1234', 'Z1235, 'Z1236'] select * from db_table where db_idno not in var_nos これは可能ですか?

**読んだ後、わかりません。 POHEDに表示されていないvar_nosの値を返したいと思います。

おそらくSQLはこれを処理する最善の方法ではありませんか?

+0

SQLですべて可能です...値の一覧はどこですか?テーブルで?変数には? – Esperento57

答えて

1

外部結合は、それを行う必要があります。

また
with var_nos (no) as (values ('Z1234'), ('Z1235'), ('Z1236')) 
select no 
from var_nos 
left outer join 
db_table 
    on db_table.db_idno = var_nos.no 
where db_table.db_idno is null 

select no 
from table (values ('Z1234'), ('Z1235'), ('Z1236')) as var_nos (no) 
where not exists (
    select 1 from db_table where db_table.db_idno = var_nos.no 
) 

P.S.未検証。

1

リストを作成するのではなく、必要に応じて一時テーブルを宣言することができます。 ただし、次のクエリと同じ結果が得られます。結果から除外するリストの一時変数を作成するのと同じくらいエレガントではありません。

SELECT * FROM db_table 
WHERE db_idno NOT IN (SELECT db_idno FROM db_table WHERE db_idno NOT IN ('Z1234', 'Z1235, 'Z1236')) 

私はこれをMySQLでテストしています。どうすればいいのか教えてください。

+0

なぜ内部クエリ - ちょうどメインクエリ – Hogan

1

あなたは 'not in'を使うことができます。

select * 
from db_table where db_idno not in (
    select * from (
     select 'Z1234' db_idno 
     union select 'Z1235' 
     union select 'Z1236' 
    ) exclude 
) 

MySQLでテスト済みです。

+0

でここに3つのクエリを持っていないだけで1つが必要です。 – Hogan

1

あなたはこれが唯一のSPで動作するテーブルに

SELECT * 
FROM db_table 
LEFT JOIN UNNEST(var_nos AS T(var_nos)) ON T.var_nos = db_table.var_nos 
WHERE T.var_nos is null 

それを回すためにアレイ上UNNESTを使用することができます。

関連する問題