Записки программиста Программирование и не только

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)
  1. Вообще есть такое понятие как «иерархические запросы», в MSSQL они появились вроде с 2005, в Oracle с 8й версии.
    В Oracle есть отдельный специальный псевдостолбец для такого — CONNECT_BY_ISLEAF.
    К примеру
    SELECT T.*, CONNECT_BY_ISLEAF
    FROM EMPLOYERS
    CONNECT BY EMP_ID = PRIOR EMP_PARENTID


Leave a comment

Нет обратных ссылок на эту запись.