在 'IN' 子句中使用列名时有什么注意事项吗?
Are there any caveats when using column names in 'IN' clause?
我只是需要在 2 列中搜索特定的字符串值,所以我通常的做法是
SELECT ... FROM ...
WHERE (col1 = 'xyz' OR col2 = 'xyz')
但是如果我必须检查多个值(只是为了快速检查),说一次 'abc',然后 'www',然后 'lol',依此类推,它是痛。
所以,我尝试了这个并且成功了!我从来不知道支持这种语法。
SELECT ... FROM ...
WHERE 'xyz' IN (col1, col2)
这样用可以吗?我的意思是有什么注意事项吗?
引擎在两种情况下执行完全相同的操作。在Predicate:
上可以看得很清楚
DECLARE @Table TABLE (
FirstValue INT,
SecondValue INT)
INSERT INTO @Table (
FirstValue,
SecondValue)
VALUES
(1, 10),
(2, 20)
案例一:
SELECT
*
FROM
@Table AS T
WHERE
1 IN (T.FirstValue, T.SecondValue)
案例二:
SELECT
*
FROM
@Table AS T
WHERE
T.FirstValue = 1 OR T.SecondValue = 1
我只是需要在 2 列中搜索特定的字符串值,所以我通常的做法是
SELECT ... FROM ...
WHERE (col1 = 'xyz' OR col2 = 'xyz')
但是如果我必须检查多个值(只是为了快速检查),说一次 'abc',然后 'www',然后 'lol',依此类推,它是痛。
所以,我尝试了这个并且成功了!我从来不知道支持这种语法。
SELECT ... FROM ...
WHERE 'xyz' IN (col1, col2)
这样用可以吗?我的意思是有什么注意事项吗?
引擎在两种情况下执行完全相同的操作。在Predicate:
上可以看得很清楚DECLARE @Table TABLE (
FirstValue INT,
SecondValue INT)
INSERT INTO @Table (
FirstValue,
SecondValue)
VALUES
(1, 10),
(2, 20)
案例一:
SELECT
*
FROM
@Table AS T
WHERE
1 IN (T.FirstValue, T.SecondValue)
案例二:
SELECT
*
FROM
@Table AS T
WHERE
T.FirstValue = 1 OR T.SecondValue = 1