Ключевое слово IN против ключевого слова OR - PullRequest
4 голосов
/ 08 августа 2011

Имеет ли это большое значение, если я использую одно из следующего в предложении WHERE:

WHERE [Process Code] = 1 AND ([Material ID] = 'PLT' OR [Material ID] = 'BMI')

--or

WHERE [Process Code] =  1 AND [Material ID] IN ('PLT', 'BMI')

Было бы время, когда я бы использовал один вместо другого?

Ответы [ 4 ]

5 голосов
/ 08 августа 2011

Я не могу вспомнить, когда бы я использовал первый вариант. Второй вариант намного чище и выразительнее. И если его когда-либо нужно будет преобразовать в суб-выбор, это будет легче сделать.

4 голосов
/ 08 августа 2011

В приведенном вами примере они делают то же самое (они приведут к одному и тому же плану выполнения).Тем не менее, с последним синтаксисом (помимо краткости) вы можете сделать это:

WHERE [Process Code] = 1 AND [Material ID] IN (SELECT ID FROM Material WHERE Type = @type)
1 голос
/ 08 августа 2011

Планы выполнения запросов обычно одинаковы в любом случае.Вы можете проверить выражения на null (ISNULL(@parm,'') или ISNULL([fieldname],'') и т. Д.) Перед выполнением сравнения.

Microsoft предупреждает:

Любые значения NULL, возвращаемые подзапросом или выражениемкоторые сравниваются с test_expression, используя IN или NOT IN, возвращают UNKNOWN.Использование нулевых значений вместе с IN или NOT IN может привести к неожиданным результатам.

1 голос
/ 08 августа 2011

IN - просто синтаксический сахар для группы OR's.IN обычно предпочтительнее, потому что его гораздо легче читать: он не повторяет имя переменной, и вам не нужно думать о том, имеет ли AND или OR более высокий приоритет оператора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...