在“ IN”子句中使用列名时是否有任何警告?

时间:2019-02-06 12:44:58

标签: sql sql-server where-clause in-clause

我只需要在两列中搜索特定的字符串值,所以我通常的方法是

SELECT ... FROM ...
WHERE (col1 = 'xyz' OR col2 = 'xyz')

但是,如果我不得不检查多个值(只是为了快速检查),请对“ abc”,“ www”,“ lol”等都说一次,那真是很痛苦。

因此,我尝试了此方法,并成功了!我不知道是否支持这种语法。

SELECT ... FROM ...
WHERE 'xyz' IN (col1, col2)

可以使用这种方式吗?我的意思是有什么警告吗?

1 个答案:

答案 0 :(得分:3)

在两种情况下,引擎都会执行完全相同的操作。您可以在谓词上看到它:

DECLARE @Table TABLE (
    FirstValue INT,
    SecondValue INT)

INSERT INTO @Table (
    FirstValue,
    SecondValue)
VALUES
    (1, 10),
    (2, 20)

情况1:

SELECT
    *
FROM
    @Table AS T
WHERE
    1 IN (T.FirstValue, T.SecondValue)

enter image description here

情况2:

SELECT
    *
FROM
    @Table AS T
WHERE
    T.FirstValue = 1 OR T.SecondValue = 1

enter image description here