Скажите, что кто-то подошел к вам и сказал, что мы сократим количество SQL, которое мы пишем, заменив equals на IN
. Использование было бы как для одиночных скалярных значений, так и для списков чисел.
SELECT *
FROM table
WHERE id = 1
ИЛИ
SELECT *
FROM table
WHERE id IN (1)
Являются ли эти утверждения эквивалентными тому, что создает оптимизатор?
Это выглядит очень просто на поверхности, но это приводит к упрощению по двум причинам: 1. большие блоки SQL не нужно дублировать, а 2. мы не злоупотребляем динамическим SQL.
Это надуманный пример, но рассмотрим следующее.
select a.* from tablea a
join tableb b on a.id = b.id
join tablec c on b.id2 = c.id2
left join tabled d on c.id3 = c.id3
where d.type = 1
... и то же самое снова для более чем одного случая
select a.* from tablea a
join tableb b on a.id = b.id
join tablec c on b.id2 = c.id2
left join tabled d on c.id3 = c.id3
where d.type in (1,2,3,4)
(это даже не большой оператор)
предположительно вы могли бы выполнять конкатенацию строк, но это нежелательно в свете использования ORM, а динамическая конкатенация строк SQL всегда начинается с благих намерений (по крайней мере, в этих частях).