SQL:查询多级分层表

时间:2015-10-09 17:03:25

标签: mysql sql parent-child multi-level

我目前正在尝试从不同的表创建一个多级结构 测试有很多步骤。潜在的关系是:

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_uutresult_sequut_id链接 父子关系由step_id = step_parent_id

反映出来

result_step

uut_id, step_id, step_parent_id, step_name

它与result_seq

result_seq.step_id = result_step.step_parent_id相关联

我想知道如何让输出具有父seq名称,子seq名称和步骤名称,并按顺序(1->1.1->1.1.1->1.1.2...)显示。

1 个答案:

答案 0 :(得分:0)

未经测试,我希望我做对了,但如果不是,至少你明白了(假设你正在为uut_id使用32位整数):

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标记,该标记是一个30位整数,通过连接每个填充到10位的uut_ids获得。这个hack是必要的,因为如果我们只是尝试构建实际的整数,我们将溢出64位。然后我们联合,按ord命令并在一个简单的子查询的帮助下抛弃ord。