Как я могу получить идентификаторы предков для произвольной глубины рекурсии в одном запросе SQL? - PullRequest
2 голосов
/ 26 декабря 2011

таблица:

    id  parent_id
    --------------
    a_1 NULL
    a_2 NULL
    b_1 a_1
    c_1 b_1
    d_1 c_1

Теперь у меня есть идентификатор: d_1

Как мне получить a_1, b_1, c_1в одном SQL-запросе?(d_1 идентификаторы предков)?

Ответы [ 2 ]

2 голосов
/ 26 декабря 2011
SELECT c.id, b.id, a.id 
FROM T 
INNER JOIN T AS c on T.parent_id=c.id 
INNER JOIN T AS b ON c.parent_id = b.id 
INNER JOIN T as a ON b.parent_id = a.id

при условии, что ваша таблица с именем T. не проверена. не уверен, что произойдет, если у d нет трех родителей, возможно, вы ничего не получите, возможно, попробуйте LEFT JOIN для этих случаев, чтобы получить значения NULL для великих родителей. Кроме того, последний JOIN не является действительно необходимым, потому что вы можете просто выбрать b.parent_id вместо a.id, но, вы знаете, просто отправить шаблон домой;)

1 голос
/ 26 декабря 2011

Я действительно не думаю, что вы можете сделать это простым оператором SQL, это фундаментальное ограничение языка SQL.

Здесь - отвратительная хранимая процедура, которая примерновы хотите (для SQL Server).Так что вам нужно сделать что-то вроде этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...