我目前正在尝试从不同的表创建多级结构 测试有很多步骤。基本关系是:
1. parent sequence AA
1.1 child sequence BB
1.1.1 Step CC
共有三个表:
result_uut
具有以下列:
uut_id, uut_serial_number, uut_name
result_seq
有
uut_id, step_id, step_parent_id, step_name
result_uut
和 result_seq
通过 uut_id
链接
父子关系通过 step_id = step_parent_id
result_step
已
uut_id, step_id, step_parent_id, step_name
它通过result_seq.step_id = result_step.step_parent_id
链接到result_seq
我想知道如何让输出具有父序列名称、子序列名称和步骤名称,并按顺序显示(1->1.1->1.1.1->1.1.2...)
。
最佳答案
未经测试,我希望我的理解是正确的,但如果不是,至少您明白了(假设您正在使用 32 位整数作为 uut_id):
select cmb.tag from (select uut_id as tag,concat(lpad(uut_id,10,'0'),repeat('0',20)) as ord or from result_uut
union
select concat_ws('.',aa.uut_id,bb.uut_id,cc.uut_id) as tag,concat(lpad(aa.uut_id,10,'0'),lpad(bb.uut_id,10,'0'),repeat('0',10)) as ord from result_uut aa join result_seq bb on aa.uut_id = bb.step_parent_uut_id
union
select concat_ws('.',aa.uut_id,bb.uut_id,cc.uut_id) as tag,concat(lpad(aa.uut_id,10,'0'),lpad(bb.uut_id,10,'0'),lpad(cc.uut_id,10,'0') as ord from result_uut aa join result_seq bb on aa.uut_id = bb.step_parent_uut_id join result_step cc on bb.uut_id = cc.step_parent_uut_id) cmb order by ord;
我们的想法是,我们使用连接来生成标签,对于每个标签,我们生成 ord 标记,它是通过连接 uut_ids 获得的 30 位整数,每个 uut_ids 填充为 10 位数字。这个 hack 是必要的,因为如果我们只是尝试构建实际的整数,我们就会溢出 64 位。然后我们通过简单的子查询联合、排序并丢弃 ord。
关于mysql - SQL:查询多级分层表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33043668/