我有以下表格:
persons:
- personid: int not null
- personname: varchar(200) not null
parents:
- parentid: int not null
- personid: int not null
一个人可能有子元素,在这种情况下,parents
表中有行,其中每一行标识一个父/子关系.
我现在有以下递归查询:
WITH RECURSIVE cte (personid, parentid) as (
-- Anchor query
SELECT
personid AS personid,
NULL AS parentid
FROM
persons
WHERE
personid = ?
UNION ALL
-- Recursive query
SELECT
p.personid,
p.parentid
FROM
parents p
INNER JOIN
cte ON p.parentid = cte.personid
)
SELECT
parentid,
personid
FROM
cte
锚点行被赋予person
的ID作为开始.我希望这个查询递归地 Select 那个人以及他的所有子元素.
但是它不起作用:查询返回预期的行数,但是parentid
字段始终为空(!),除了第一行的值是NULL
(这正是我想要的).personid
列的值对于每一行似乎都是正确的.
parentid
的值怎么可能是空的?我做错了什么?
我使用的是MariaDB 10.5.19.MySQL 8.0.27表现出相同的行为.