从 mysql 中的自引用 table 获取 parent 和 grandparent
Get parent and grandparent from self referencing table in mysql
我有一个 offices
table 自引用
id name parent_id
---------------------
1 A 0
2 B 1
3 C 2
4 D 3
预期输出:
child - grandparent
parent - grandparent
grandparent - grandparent
更多可视化
id name expected_name
---------------------------
4 D B
3 C B
2 B B
我的代码:
SELECT child.id,child.name,grand.name
FROM offices AS child
JOIN offices AS parent ON child.parent_office_id = parent.id
JOIN offices AS grand ON grand.id = parent.parent_office_id
WHERE child.id=4
它只是给我 child-grandparent result.I 需要其他两个关系 too.How 我可以实现吗?
WITH cte AS ( SELECT child.id cid, child.name cname,
parent.id pid, parent.name pname,
grand.id gid, grand.name gname
FROM offices AS child
JOIN offices AS parent ON child.parent_id = parent.id
JOIN offices AS grand ON parent.parent_id = grand.id
WHERE child.id = 4 )
SELECT cid id, cname name, gname expected_name FROM cte
UNION ALL
SELECT pid, pname, gname FROM cte
UNION ALL
SELECT gid, gname, gname FROM cte
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=77a59b2f6b8604e042754f6986b9a24b
我有一个 offices
table 自引用
id name parent_id
---------------------
1 A 0
2 B 1
3 C 2
4 D 3
预期输出:
child - grandparent
parent - grandparent
grandparent - grandparent
更多可视化
id name expected_name
---------------------------
4 D B
3 C B
2 B B
我的代码:
SELECT child.id,child.name,grand.name
FROM offices AS child
JOIN offices AS parent ON child.parent_office_id = parent.id
JOIN offices AS grand ON grand.id = parent.parent_office_id
WHERE child.id=4
它只是给我 child-grandparent result.I 需要其他两个关系 too.How 我可以实现吗?
WITH cte AS ( SELECT child.id cid, child.name cname,
parent.id pid, parent.name pname,
grand.id gid, grand.name gname
FROM offices AS child
JOIN offices AS parent ON child.parent_id = parent.id
JOIN offices AS grand ON parent.parent_id = grand.id
WHERE child.id = 4 )
SELECT cid id, cname name, gname expected_name FROM cte
UNION ALL
SELECT pid, pname, gname FROM cte
UNION ALL
SELECT gid, gname, gname FROM cte
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=77a59b2f6b8604e042754f6986b9a24b