Есть ли какие-либо предостережения при использовании имен столбцов в предложении IN? - PullRequest
0 голосов
/ 06 февраля 2019

Мне просто нужно было найти конкретное строковое значение в 2 столбцах, поэтому мой обычный подход -

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

Но если мне нужно было проверить несколько значений (только для быстрой проверки), скажем один раздля «abc», «www», «lol» и т. д. это боль.

Итак, я попробовал это, и это сработало!Я никогда не знал, что этот синтаксис поддерживается.

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

Можно ли использовать этот способ?Я имею в виду, есть ли какие-то предостережения?

1 Ответ

0 голосов
/ 06 февраля 2019

Двигатель выполняет одинаковую операцию в обоих случаях.Это ясно видно на Предикате :

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

...