我有不同的表,目标是为每个客户获得批准工作流程
客户具有不同的批准工作流程,请查看此:
在我的表中的“实体”中,我有这个
(((12,'Math Andrew',308,'CHAIN1-MathAndrew')。
这意味着在创建行时,将数字12分配给了数学安德鲁... 308是表示马特·安德鲁是客户的数字
Table type_entities
(308,'CLIENT'),
(309,'APPROVER1'),
(310,'APPROVER2'),
(311,'APPROVER3'),
(312,'J3 APPROVER4'),
(313,'J4 APPROVER4'),
(314,'J5 APPROVER4'),
(315, 'J6 APPROVER4'),
(316,'J7 APPROVER4');
因为数学安德鲁是客户(也称为客户),所以他必须链接到一个或多个批准者
一个客户可能有1个批准者,或2个批准者,或3个批准者或4个批准者,实体表中存在不同的批准者:
(18, 'ZATCH', 309, null),
(19, 'MAX', 309, null),
(20, 'Ger',310, null),
(21, 'Mar',310, null),
(22, 'Maxwell',311, null),
(23, 'Ryan',312, null),
(24, 'Juy',313, null),
(25, 'Angel',314, null),
(26, 'John',315, null);
实体之间的关系类型:
(444,'J6 CLIENT-APPROVER4'),
(445,'J3 CLIENT-APPROVER4'),
(446,'J4 CLIENT-APPROVER4'),
(447,'J10 CLIENT-APPROVER4'),
(448,'J4 CLIENT-APPROVER4'),
(449,'J5 CLIENT-APPROVER4'),
(450,'J10 CLIENT-APPROVER4'),
(451,'J3 CLIENT-APPROVER4'),
(452,'J8 CLIENT-APPROVER4'),
(453,'J5 CLIENT-APPROVER4'),
(454,'J6 CLIENT-APPROVER4'),
(455,'J7 CLIENT-APPROVER4'),
(456,'J7 CLIENT-APPROVER4'),
(457,'J8 CLIENT-APPROVER4'),
(458,'CLIENT-APPROVER3'),
(459,'CLIENT-APPROVER1'),
(460,'APPROVER1-APPROVER2'),
(461,'APPROVER1-APPROVER3'),
(462,'J3 APPROVER1-APPROVER4'),
(463,'APPROVER2-APPROVER3'),
(464,'J3 APPROVER3-APPROVER4'),
(465,'J4 APPROVER3-APPROVER4'),
(466,'J5 APPROVER3-APPROVER4'),
(467,'J6 APPROVER3-APPROVER4'),
(468,'J7 APPROVER3-APPROVER4'),
(469,'J8 APPROVER3-APPROVER4'),
(470,'J10 APPROVER3-APPROVER4'),
(471,'CLIENT-APPROVER2');
这是重要的部分:当客户端链接到一个批准者时,将在relationships表中创建一个关系。
在这种情况下,[[MathAndrew已链接到批准者编号18(批处理),此行在分配后创建:
(787,459,'CHAIN1-MathAndrew',18)-
-787是行数分配时的数字459代表关系客户-批准人
CHAIN1-MathAndre是
客户端18是批准者
此外,在这种情况下,APPROVER1已链接到APPROVER2
((788,460,18,20)
然后,将APPROVER2链接到APPROVER3
((789,463,20,21)
最后,APPROVER3已链接到APPROVER4
(790,467,21,26)
我想获得完整的批准工作流程链,我的意思是:
CHAIN1-MathAndrew-ZATCH-Ger-Mar-John
我这样做了,但是我没有得到想要的东西:WITH relationships_CTE as
select description_entity_1,description_entitiy_2
from relationships
where description_entitiy_1 like 'CHAIN1-MathAndrew'
UNION ALL
select description_entity_1,description_entitiy_2
from relationships
where relationships.description_entitiy_2 = relationships_CTE.description_entitiy_2
select *
from relationships_CTE ma
left join relationships_CTE na
这是我的SQL FIDDLE:http://sqlfiddle.com/#!9/51bb39/4
您能帮我吗?
entities
表中获取名称以与relationships
表中的值相对应。因此,我们通过为CTE
找到适当的entities.id
值来开始CHAIN1-MathAndrew
,然后在CTE的递归部分中,我们遍历与该实体相关的所有实体,并随即获取名称。这给了我们这个查询:WITH recursive relationships_CTE as (
select e.id, e.description AS name
from entities e
where e.description like 'CHAIN1-MathAndrew'
UNION ALL
select r.description_entitiy_2, e.name
from relationships_CTE cte
left join relationships r
on r.description_entitiy_1 = cte.id
join entities e ON r.description_entitiy_2 = e.id
)
[如果现在开始
select *
from relationships_CTE
我们得到
id name
12 CHAIN1-MathAndrew
18 ZATCH
20 Ger
21 Mar
26 John
或者我们可以使用GROUP_CONCAT
将这些名称串在一起:
select group_concat(name separator '-')
from relationships_CTE
输出:
CHAIN1-MathAndrew-ZATCH-Ger-Mar-John