- 1
- 2
- 3
- 4
- 5
- 6
SELECT *
FROM `table`
WHERE `parent_id` = NULL
OR `parent_id` IN (
SELECT `id` FROM `table` WHERE `parent_id` = NULL
)
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
−865.7
SELECT *
FROM `table`
WHERE `parent_id` = NULL
OR `parent_id` IN (
SELECT `id` FROM `table` WHERE `parent_id` = NULL
)
Страная оптимизация запроса
>>`parent_id` = NULL
`parent_id` is NULL!!!
IS будет работать медленее чем явное указание потому как будет производится тест на boolean выражения, соль не в этом, child запрос дублирует root запрос то есть у нас идет сначало проверка первого условия а затем и второго которое фактически его дублирует, то что там есть индексы это конечно хорошо, вот только логическое или сначало выполнит полностью первый запрос а потом второй и толку от child запроса 0
Если это запрос MySQL, то `parent_id` = NULL будет не правильно работать
это ShitQL? :))
И подзапрос вполне корректный, #2 - ошибаешься, что он дублирует основной.
Другое дело - можно было сделать лучше и оптимальнее, но клеймить говнокодом?..
=/IS NULL и IN будут по разному работать.
в Firebird например любое сравнение с NULL возвращает false, для этого используется IS.
Для трехуровнего дерева работать не будет очевидно. Хороший говнокод :)
Тут же явно MySQL, но и в нем не факт, что в старших версиях это будет работать.