mysql - SQL:查询多级分层表

标签 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_seq 通过 uut_id 链接 父子关系通过 step_id = step_parent_id

反射(reflect)

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/

相关文章:

c - 将子窗口附加到其父窗口的底部

Elasticsearch - 包含子文档(如果存在)

php - 如何向 Yii CDbCriteria select 添加条件?

mysql order by,首先显示大写结果

mysql - Vb.net登录 session 和Mysql查询

mysql - 从一对多关系中只检索一条记录

MYSQL - 子查询问题

sql - SQLite CASE语句-如果不存在,请插入

java - 在 jpa 标准中, "in case there is at least 1 row return true"

javascript - HTML 如何获取父组件的 id?