1

私はオラクルでこのクエリを持っています:

select * from table where col2 in (1,2,3,4);

この結果を得たとしましょう

col1 | col2
-----------
a       1
b       2

私の「in (1,2,3,4)」部分には 20 以上のオプションがあります。テーブルにない値をどのように判断できますか? 私の例では 3 と 4 はテーブルに存在しません

4

3 に答える 3

1

あなたが望む方法で行うことはできません。

検索する値をテーブルに挿入してから、目的のテーブルに存在しないすべての値を選択する必要があります。

検索したいデータがにAあり、に存在しないデータを知りたいとしましょうB

SELECT *
FROM   table_a A
WHERE  NOT EXISTS (SELECT * 
                   FROM table_b B 
                   WHERE B.col1 = A.col1);
于 2013-02-07T16:33:54.963 に答える
1

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;
于 2013-02-07T16:39:37.270 に答える
0

特定の例に整数を使用している場合は、次の方法があります。

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

幸運を。

于 2013-02-07T16:39:05.453 に答える