我需要使用递归将数据插入新表
person_department
。
我现在的桌子:
person
id group_id
800 10
805 21
department
id name group_id parent_id
1 ABC 10 5
2 TY 11 5
5 OOO null 9
6 BN 21 9
9 AA null 10
10 WEB null null
所以新表应该填写如下:
person_id department_id
800 1
800 5
800 9
800 10
805 6
805 9
805 10
对于每个人,我需要设置相应的部门及其所有家长。
我试过这个:
WITH RECURSIVE department_hierarchy AS (
SELECT d.id AS department_id, d.parent_id
FROM department d
JOIN person p ON d.group_id = p.group_id
UNION ALL
SELECT d.id AS department_id, d.parent_id
FROM department d
JOIN department_hierarchy dh ON d.id = dh.parent_id
)
INSERT INTO person_department (person_id, department_id)
SELECT p.id AS person_id, dh.department_id
FROM person p
JOIN department_hierarchy dh ON dh.parent_id IS NULL OR dh.department_id IN (
SELECT department_id FROM department_hierarchy
);
但它无法正常工作。
WITH RECURSIVE
department_hierarchy AS
(
SELECT
p.id AS person_id,
d.id AS department_id
FROM
person AS p
INNER JOIN
department AS d
ON d.group_id = p.group_id
UNION ALL
SELECT
p.person_id,
d.parent_id
FROM
department_hierarchy AS p
INNER JOIN
department AS d
ON d.id = p.department_id
WHERE
d.parent_id IS NOT NULL
)
INSERT INTO
person_department (
person_id,
department_id
)
SELECT
*
FROM
department_hierarchy