- 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
)
Страная оптимизация запроса
guest 04.03.2009 10:11 # 0
>>`parent_id` = NULL
`parent_id` is NULL!!!
guest 04.03.2009 12:18 # 0
IS будет работать медленее чем явное указание потому как будет производится тест на boolean выражения, соль не в этом, child запрос дублирует root запрос то есть у нас идет сначало проверка первого условия а затем и второго которое фактически его дублирует, то что там есть индексы это конечно хорошо, вот только логическое или сначало выполнит полностью первый запрос а потом второй и толку от child запроса 0
guest 04.03.2009 14:12 # 0
Если это запрос MySQL, то `parent_id` = NULL будет не правильно работать
guest 04.03.2009 14:13 # +1
это ShitQL? :))
guest 06.03.2009 08:44 # 0
И подзапрос вполне корректный, #2 - ошибаешься, что он дублирует основной.
Другое дело - можно было сделать лучше и оптимальнее, но клеймить говнокодом?..
guest 06.03.2009 13:33 # 0
=/IS NULL и IN будут по разному работать.
guest 13.03.2009 16:58 # 0
в Firebird например любое сравнение с NULL возвращает false, для этого используется IS.
Для трехуровнего дерева работать не будет очевидно. Хороший говнокод :)
guest 11.08.2009 09:54 # 0
Тут же явно MySQL, но и в нем не факт, что в старших версиях это будет работать.
Oleg_quadro 24.08.2009 19:10 # 0