有create:
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for test
-- ----------------------------
DROP TABLE IF EXISTS `test`;
CREATE TABLE `test` (
`id` int(11) DEFAULT NULL,
`pid` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
-- ----------------------------
-- Records of test
-- ----------------------------
BEGIN;
INSERT INTO `test` VALUES (1, 2);
INSERT INTO `test` VALUES (2, 6);
INSERT INTO `test` VALUES (2, 3);
INSERT INTO `test` VALUES (3, 4);
INSERT INTO `test` VALUES (4, 5);
INSERT INTO `test` VALUES (5, 2);
COMMIT;
SET FOREIGN_KEY_CHECKS = 1;
表看起来如下:
id再分配pid
1.再评核2
2.再接电话6
2.再培训局3
3.再培训局4
4.再补贴5
5.一般用途2
我想输出:
不要循环
我应该怎么做,使用Python还是MySQL?
发布于 2019-12-06 02:30:05
我找到了一个方法
with recursive cte (id, pid ,path) as (
select id,
pid,
CAST(1 as char(255) ) as path
from test
where id = 1
union
select p.id,
p.pid,
CONCAT(cte.path,',',p.id) AS path
from test p
inner join cte
on (p.id = cte.pid and cte.pid <> 1 and FIND_IN_SET(cte.pid,cte.path)<1 )
)
select id,pid ,CONCAT(path,',',pid) FROM cte;
https://stackoverflow.com/questions/59187510
复制相似问题