У меня есть таблица в моей базе данных, в которой хранится древовидная структура. Вот соответствующие поля:
mytree (id, parentid, otherfields...)
Я хочу найти все листовые узлы (то есть любую запись, чья id
не является другой записью parentid
)
Я пробовал это:
SELECT * FROM mytree WHERE `id` NOT IN (SELECT DISTINCT `parentid` FROM `mytree`)
Но это вернуло пустой набор. Как ни странно, удаление «НЕ» возвращает набор всех нелистовых узлов.
Может ли кто-нибудь увидеть, где я ошибаюсь?
Обновление: Спасибо за ответы, все они были правильными и работали на меня. Я принял вариант Даниэля, так как он также объясняет, почему мой запрос не сработал (вещь NULL).