mysql获取到根的路径

yh2wf1be  于 2021-06-23  发布在  Mysql
关注(0)|答案(1)|浏览(319)

我有一张像这样的table

id      | parent_id
________|_________
'A'     | NULL
'B      | 'A'
'C'     | 'B'
'K'     | NULL
'J'     | 'K'
'Y'     | 'J'

我想以这样一种方式查询mysql,即我将拥有每个id的整个父路径。
喜欢

id      | parent_ids
________|_________
'A'     | NULL
'B      | 'A'
'C'     | 'A','B'
'K'     | NULL
'J'     | 'K'
'Y'     | 'J','K'
zujrkrfu

zujrkrfu1#

不幸的是,mysql 5没有递归查询。
但是如果没有很多级别(例如4),可以使用几个与 UNION ALL . 我认为这会比一个困难而难理解的问题更快更容易理解。
试验数据

create table products(
  id varchar(1),
  parent_id varchar(1)
);

insert products(id,parent_id)values
('A',NULL),
('B','A'),
('C','B'),
('K',NULL),
('J','K'),
('Y','J');

演示查询

SELECT l1.id,l1.parent_id,NULL parent_ids
FROM products l1
WHERE l1.parent_id IS NULL

UNION ALL

SELECT l2.id,l2.parent_id,l1.id
FROM products l1
JOIN products l2 ON l2.parent_id=l1.id
WHERE l1.parent_id IS NULL

UNION ALL

SELECT l3.id,l3.parent_id,concat(l1.id,',',l2.id)
FROM products l1
JOIN products l2 ON l2.parent_id=l1.id
JOIN products l3 ON l3.parent_id=l2.id
WHERE l1.parent_id IS NULL

UNION ALL

SELECT l3.id,l3.parent_id,concat(l1.id,',',l2.id,',',l3.id)
FROM products l1
JOIN products l2 ON l2.parent_id=l1.id
JOIN products l3 ON l3.parent_id=l2.id
JOIN products l4 ON l4.parent_id=l3.id
WHERE l1.parent_id IS NULL

sql小提琴-http://sqlfiddle.com/#!2016年9月0b76f4日

相关问题