Я рефакторинг старого кода SQL коллег и заметил в нескольких местах предложение where формы where [SomeCol] in ('XYZ')
. Я предполагаю, что это результат быстрой скопирования из других мест в коде с большим количеством значений в скобках (where [SomeCol] in ('ABC', 'DEF', 'XYZ')
) и заменой их [SomeCol] = 'XYZ'
, даже если только для аккуратности.Любая разница между [col] in ('single element') и [col] = 'single element'?
Просто хотел быть абсолютно уверенным, хотя два утверждения функционально эквивалентны - я бы предположил, что [SomeCol] = 'XYZ'
немного (скорее всего, нецелесообразно) более эффективно, но не хочу, чтобы узнать позже. Я спотыкаюсь о какой-то неясной функциональность, которая даст разные результаты.
Взгляните на план выполнения. Для моих примеров это одно и то же. – makciook
Они эквивалентны во всех отношениях. Никакой разницы в результатах и никакой разницы в производительности. Если вы проверите план выполнения, вы увидите, что ваш '[SomeCol] in ('XYZ')' выполняется как '[SomeCol] = 'XYZ'', поэтому вы не измените его, изменив его. –
@Kai. , , Единственное различие - ремонтопригодность. Если вы можете добавлять и удалять значения, тогда форма 'in' более безопасна. Вам не нужно беспокоиться о том, что кто-то меняет 'x = 'a' и y = 'c'' на' x =' a 'или x =' b 'и y =' c''. –