3

値(キー)、1、2、3、4、5のセットと、次の表があります。

id key
------
1  2
2  8
3  4

指定されたキーのどれがdbにあるかを確認する必要がある場合は、次を使用します。

SELECT * 
  FROM mytable 
 WHERE key IN (1,2,3,4,5)

したがって、キー2と4の行を取得します。

与えられたキーのどれがdbにないかを見つけるためのある種のmysqlの方法はありますか?したがって、この場合は1,3,5を取得したいと思います。

4

3 に答える 3

5

キーを使用して一時テーブルを作成します。

CREATE TEMPORARY TABLE mykeys (`key` INT);
INSERT INTO mykeys VALUES (1),(2),(3),(4),(5);

次に、NOT IN を使用します。

SELECT `key`
FROM mykeys
WHERE `key` NOT IN (SELECT `key` FROM mytable)

最後に、必要に応じて TEMP テーブルを削除します。

DROP TABLE mykeys

編集: SQLFiddleを追加しました。


EXCEPToperatorをサポートする PostgreSQL を使用しており、ステートメントを使用して値のリストから行セットを作成できる場合は、一時テーブル ( SQLFiddle )VALUESを使用せずにこれを行う別の簡単な方法があります。

VALUES (1),(2),(3),(4),(5)
EXCEPT
SELECT key FROM mytable
于 2013-01-01T23:00:37.550 に答える
1

これは非常に厄介な解決策ですが、うまくいきます:

select v.val from
(
  select 1 as val
  union
  select 2 as val
  union
  select 3 as val
  union
  select 4 as val
  union
  select 5 as val
) v
WHERE
v.val NOT IN(
  SELECT `key` 
  FROM mytable 
  WHERE key IN (1,2,3,4,5)
);
于 2013-01-01T22:55:25.507 に答える
1

これは少し不格好ですが、うまくいきます:

select sq.val
from   mytable t
       right join (select 1 as val
                   union 
                   select 2
                   union 
                   select 3
                   union 
                   select 4
                   union 
                   select 5 ) as sq
 on t.col = sq.val
 where t.id is null;

必須の SQL フィドル。

于 2013-01-01T23:18:00.517 に答える