Mar*_*rio 2 sql database hierarchical-data
我有一个具有以下结构的SQL表.
id - int
par - int (relational to id)
name - varchar
Run Code Online (Sandbox Code Playgroud)
如果没有引用,列par包含对id或NULL的引用,此表用于构建分层树.
然后,给出数据:
id par name
1 NULL John
2 NULL Mario
3 1 George
4 3 Alfred
5 4 Nicole
6 2 Margaret
Run Code Online (Sandbox Code Playgroud)
我想从给定的单个id中检索一个分层树,直到最后一个父.
例如,我想知道从Nicole到最后一位父亲的树.所以查询结果将是:
id par name
5 4 Nicole
4 3 Alfred
3 1 George
1 NULL John
Run Code Online (Sandbox Code Playgroud)
我通常会在SQL查询中反复重复并构建树服务器端,但我现在不想这样做.
有没有办法用单个SQL查询实现这一点?
我需要MySQL或PgSQL.
而且我想知道,如果可能的话,它是否也受到广泛支持?我希望支持MySQL或PgSQL的哪个版本?
Postgres中的单个查询可以使用递归公用表表达式.这在MySQL中是不可能的,因为它是少数不支持递归CTE的数据库之一.
它看起来像这样(未经测试)
WITH RECURSIVE tree (id, par, name) AS (
SELECT id, par, name
FROM the_table
WHERE name = 'Nicole'
UNION ALL
SELECT id, par, name
FROM the_table tt
JOIN tree tr ON tr.id = tt.par
)
SELECT *
FROM tree
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16630 次 |
| 最近记录: |