25Июл/122
[SQL] Задачка соискателю
Тема: SQL дерево.
Задача: дана одна сущность с замыканием ключа сам на себя - найти все листья
Таблица:
CREATE TABLE t1 (id integer NOT NULL PRIMARY KEY UNIQUE, id_p integer)
Решение:
SELECT * FROM t1 AS e1 WHERE NOT EXISTS (SELECT * FROM t1 AS e2 WHERE e1.id = e2.id_p)
Т.е. ищем все элементы которые не являются родителем кому-либо
Комментарии (2)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Август 31st, 2012 - 09:18
Хм
Август 31st, 2012 - 09:21
Вообще есть такое понятие как «иерархические запросы», в MSSQL они появились вроде с 2005, в Oracle с 8й версии.
В Oracle есть отдельный специальный псевдостолбец для такого — CONNECT_BY_ISLEAF.
К примеру
SELECT T.*, CONNECT_BY_ISLEAF
FROM EMPLOYERS
CONNECT BY EMP_ID = PRIOR EMP_PARENTID