我有这张表,我想存储一条记录链。
CREATE TABLE table_name (
id INT,
unique_id varchar,
reference_id varchar,
);
我想为MariDB实现SQL查询,该查询按id打印所有记录以及带有reference_id的所有记录。像这样:
| id | unique_id | reference_id | | |
|----|-----------|--------------|---|---|
| 43 | 55544 | | | |
| 45 | 45454 | 43 | | |
| 66 | 55655 | 45 | | |
| 78 | 88877 | 66 | | |
| 99 | 454 | 33 | | |
当我选择记录66进行所有向上和向下交易时,我想要,因为彼此都使用指向它们的id。如何使用递归CTE来实现?有更好的方法吗?
具有唯一ID 66的记录的预期结果:
| id | unique_id | reference_id | | |
|----|-----------|--------------|---|---|
| 43 | 55544 | | | |
| 45 | 45454 | 43 | | |
| 66 | 55655 | 45 | | |
| 78 | 88877 | 66 | | |
我尝试过,但是上面的行没有打印。
select @ref:=id as id, unique_id, reference_id
from mytable
join (select @ref:=id from mytable WHERE reference_id=@ref or id = 66)tmp
where reference_id=@ref
您能帮我找到解决方法吗?
编辑:尝试使用CTE:
with recursive cte as (
select t.*
from mytable
where t.id = 66
union all
select t.*
from cte join
mytable t
on cte.id = t.reference_id
)
select *
from cte;
我收到错误Unknown table 't'
答案 0 :(得分:1)
我不熟悉递归CTE。您可以尝试以下查询。
select t.id, t.unique_id, @uid := t.reference_id reference_id
from (select * from mytable order by id desc) t
join (select @uid := 66) tmp
where t.id = @uid or reference_id=66