私はオラクルでこのクエリを持っています:
select * from table where col2 in (1,2,3,4);
この結果を得たとしましょう
col1 | col2
-----------
a 1
b 2
私の「in (1,2,3,4)」部分には 20 以上のオプションがあります。テーブルにない値をどのように判断できますか? 私の例では 3 と 4 はテーブルに存在しません
あなたが望む方法で行うことはできません。
検索する値をテーブルに挿入してから、目的のテーブルに存在しないすべての値を選択する必要があります。
検索したいデータがにA
あり、に存在しないデータを知りたいとしましょうB
。
SELECT *
FROM table_a A
WHERE NOT EXISTS (SELECT *
FROM table_b B
WHERE B.col1 = A.col1);
INリストはばかげているか、少なくともあまり役に立ちません。代わりに、SQL Typeコレクションを使用して値を格納します。これは、値をテーブルに変換できるためです。
この例では、あいまいなSYS.KU $ _OBJNUMSETタイプを使用しています。これは、10gで知っているNumberの唯一のネストされたテーブルです。(11gにはもっとたくさんあります)。
それで
select t.column_value
from table ( SYS.KU$_OBJNUMSET (1,2,3,4) ) t
left join your_table
on col2 = t.column_value
where col2 is null;
特定の例に整数を使用している場合は、次の方法があります。
SELECT *
FROM (
Select Rownum r
From dual
Connect By Rownum IN (1,2,3,4)
) T
LEFT JOIN YourTable T2 ON T.r = T2.Col2
WHERE T2.Col2 IS NULL
そしてフィドル。
これにより、where基準1、2、3、4からテーブルが作成され、それを使用してLEFT JOIN
オンになります。
- 編集
値はintではないため、別の「醜い」オプションがあります。
SELECT *
FROM (
Select 'a' r From dual UNION
Select 'b' r From dual UNION
Select 'c' r From dual UNION
Select 'd' r From dual
) T
LEFT JOIN YourTable T2 ON T.r = T2.Col2
WHERE T2.Col2 IS NULL
http://www.sqlfiddle.com/#!4/5e769/2
幸運を。