Eu quero encontrar o ID pai mais alto para cada entrada. Por exemplo,
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);
eu pretendo obter
ID Highest ParentID
1 NULL
2 1
3 1
4 1
Planejei criar uma consulta recursiva (MySQL 8 ou MariaDB 10.5) adicionando uma condição para quebrar a recursiva quando o Parent ID for um valor específico (por exemplo, NULL no caso acima). eu comecei com
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;
mas não funciona como pretendo, pois obtém o próximo ParentID em vez de recursivamente.
Amostra de violino .
https://dbfiddle.uk/?rdbms=mysql_8.0&fiddle=209df940143d3e984d418e49929bd847
Uma possibilidade da Akinas cte é
db<>fique aqui
uma adaptação para o primeiro, se o número não for sequencial, você precisa começar com
db<>fique aqui