1

IN空のサブセットにも一致するステートメントを設定することは可能ですか?

これは私のクエリです:

.. WHERE id IN (SELECT * FROM #subset)

#subsetが空の場合もそのレコードを希望します。回避策は次のとおりです。

.. WHERE NOT EXISTS(SELECT * FROM #subset) OR id IN (SELECT * FROM #subset)

ただし、 ( SELECT * FROM #subset) はそれほど単純なクエリではなく、空のサブセットでも "IN" を使用するスマートな方法があることを知りたいです。

4

1 に答える 1

3

二重否定表現を使用します。

それ以外の

一致する行が存在する場所

.. これは

一致しない行が存在しない場所

DECLARE @m TABLE (KeyCol int, Payload varchar(2));
DECLARE @s TABLE (KeyCol int);

INSERT @m VALUES (1, 'aa'), (2, 'bb'), (3, 'cc');

-- No values in #subset
SELECT
    *
FROM
    @m M
WHERE
    NOT EXISTS (SELECT * FROM @s S WHERE M.KeyCol <> S.KeyCol);

INSERT @s VALUES (2);

-- A matching value in #subset
SELECT
    *
FROM
    @m M
WHERE
    NOT EXISTS (SELECT * FROM @s S WHERE M.KeyCol <> S.KeyCol);

もちろん、相関する EXISTS WHERE 句は複数の列に拡張できます (1 つの列のみを期待する IN 句とは異なります)。

于 2013-06-19T11:12:55.683 に答える