以下内容适用于我,适用于H2和PostgreSQL(
this you can test online using the SQL Fiddle
). 我不得不做出一些改变和假设(见下文):
create table mytable(id int, name varchar(255), parent int);
insert into mytable values(1, 'root', null), (2, 'first', 1),
(3, 'second', 1), (4, '2b', 3);
WITH RECURSIVE T(id, name, parent, path) AS (
SELECT id, name, 0 AS parent,
cast(id as varchar) AS path
FROM mytable WHERE id = 1
UNION ALL
SELECT ou.id, ou.name, ou.parent,
(T.path || '.' || CAST (ou.id AS VARCHAR)) AS path
FROM T INNER JOIN mytable AS ou ON T.id = ou.parent
) SELECT id, name, parent, path FROM T ORDER BY path
变化:
-
我认为
id
和
parent
是整数。正因为如此,我不得不使用
cast(id as varchar)
在第一次选择中。
-
我替换
+
具有
||
连接字符串时。
-
我用过
0 AS parent
.