SQL заявления с равными против в
Скажем, кто-то подошел к вам и сказал, что мы собираемся сократить объем SQL, который мы пишем, заменив равно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 всегда начинается с благими намерениями (по крайней мере, в этих частях).