|
|
|
| Структура таблицы:
create Table ie(
child INT,
parent INT
)
|
Это иерархическая структура, которая указывает кто чей ребёнок, кто чей родитель.
Требуется:
Найти всех деток не являющихся родителями.
То есть все такие строки у которых число указанное в колонке child никогда не всtречается в колонке parent. | |
|
|
|
|
|
|
|
для: Eugene77
(05.07.2009 в 16:15)
| | такие узлы называются листьями.
решается одним LEFT JOIN запросом
child - имя неудачное.
узел не может быть собственным потомком. | |
|
|
|
|
|
|
|
для: Trianon
(05.07.2009 в 16:35)
| | >решается одним LEFT JOIN запросом
Как написать что его НЕТ в колонке?
Я не знаю как это условие записывается. | |
|
|
|
|
автор: ............. (05.07.2009 в 17:19) |
|
|
для: Eugene77
(05.07.2009 в 17:12)
| | Если нет, то подставляется NULL. Для провери NULL есть оператор IS NULL. | |
|
|
|
|
|
|
|
для: Trianon
(05.07.2009 в 16:35)
| | Я чувствую, что что-то должно быть простое, но кроме сложного запроса
SELECT * FROM ie
WHERE
child NOT IN (SELECT parent FROM ie)
|
ничего не могу придумать. | |
|
|
|
|
|
|
|
|
для: Trianon
(05.07.2009 в 17:20)
| | это надо полагать:
SELECT ie.* FROM ie AS ie1 LEFT JOIN ie AS ie2
ON ie1.parent = ie2.child
WHERE ie1.parent IS NULL
|
?
Такого даже в книге у Симяднева нет.
Так что не удивительно что я не знаю. | |
|
|
|
|
|
|
|
для: Eugene77
(05.07.2009 в 18:37)
| | Зато это есть у Симдянова на форуме. | |
|
|
|
|
|
|
|
для: Trianon
(05.07.2009 в 18:54)
| | Какэто вы такой поисковый запрос догадались сочинить?
Ник автора разве является частью сообщения? | |
|
|
|
|
|
|
|
для: Trianon
(05.07.2009 в 18:54)
| | Кстати, не очень меня порадовал этот запрос.
Трудно читаемый.
С двойным селектом-то хоть всё прозрачно.
Вы уверены с Left Join быстрей будет работать?
Или у него есть ещё какое-то преимущество? | |
|
|
|
|
|
|
|
для: Eugene77
(05.07.2009 в 19:40)
| | Как насчет проверить?
Я скорее сложный запрос буду дольше вспоминать, чем эту связку.
Вообще же сильно советую приучить себя мыслить JOIN-ON'ами.
И все (даже весьма сложные) селекты и обновления и удаления при этом пишутся на раз. | |
|
|
|
|
|
|
|
для: Trianon
(05.07.2009 в 20:30)
| | >Вообще же сильно советую приучить себя мыслить JOIN-ON'ами.
>И все (даже весьма сложные) селекты и обновления и удаления при этом пишутся на раз.
Ах вот оказывается в чём секрет!
А я долго не мог понять, как стать знатоком MySQL.
Проверять на производительность не буду - это будет шаг через ступеньку. Мне бы основы понять... | |
|
|
|