我想为每个条目找到最上面的父 ID。例如,
CREATE TABLE t1
(
ID int(11) unsigned NOT NULL,
ParentID int(11) unsigned,
PRIMARY KEY (ID)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE utf8_general_ci;
INSERT INTO t1 (ID,ParentID) VALUES (1,NULL),(2,1),(3,2),(4,3);
我打算得到
ID Highest ParentID
1 NULL
2 1
3 1
4 1
我计划创建一个递归查询(MySQL 8 或 MariaDB 10.5),方法是在父 ID 为特定值(例如,在上述情况下为 NULL)时添加一个条件来中断递归。我从
WITH RECURSIVE cte (ID, ParentID) as (
SELECT ID,ParentID FROM t1
UNION ALL
SELECT t2.ID,t2.ParentID FROM t1 t2
INNER JOIN cte on t2.ParentID = cte.ID
)
SELECT * FROM cte;
但它不像我想要的那样工作,因为它获取下一个 ParentID 而不是递归。
样品小提琴。
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=209df940143d3e984d418e49929bd847
Akinas cte 的一种可能性是
db<>在这里摆弄
对第一个的改编,如果数字不是sequentiell,你需要从
db<>在这里摆弄