SQL语法=显示内部"一个表" +一个关系表

时间:2014-08-08 12:16:15

标签: mysql sql select

我尝试显示部门关系,一个表用于部门,一个用于关系。每个部门都可以有几个关系(未知),至少有一个(称为#34;无")。

在这种情况下:
tbl_Department (Dep_ID,Dep_NAME)
tbl_Relation (Rel_ID,Rel_Child_ID [ForeignKey tbl_Department.ID],Rel_Parent_ID [ForeignKey tbl_Department.ID])

我得到了最好的结果(到现在为止):

Select Parent_Table.Dep_Name as Parent, Child_Table.Dep_Name as Child
FROM tbl_department as Parent_Table, tbl_department as Child_Table, tbl_relation
WHERE Parent_Table.Dep_ID = tbl_relation.Rel_Parent_ID  
AND Child_Table.Rel_Chil_ID =tbl_relation.Rel_Child_ID

看起来像:

  

父母 - 孩子
  无 - CMDG
  无 - 基金
  无 - GSPT
  GSPT - IT支持
  IT支持 - IT安全
  IT支持 - IT管理员   基金 - 分析&报告

但这并不是我想要的。目的是为一个循环"做一个做得好的结构化结果。 to"显示公司结构"。

我想订购它(按关系)并填充空白(用于空场/关系)。

类似的东西:

  

父母 - 儿童 - 儿童 - 儿童
  none - CMDG - null - null
  none - FUND - null - null
  无 - 基金 - 分析&报告 - null
  none - GSPT - null - null
  none - GSPT - IT支持 - null
  none - GSPT - IT支持 - IT管理员   none - GSPT - IT支持 - IT安全

有没有办法从数据库(MySQL)中获取它。

1 个答案:

答案 0 :(得分:0)

因此我不知道如何执行此操作并返回任意数量的列,但如果您知道部门中只有4个级别(无计数),则可以执行以下操作:

select d1.Dep_Name, d2.Dep_Name, d3.Dep_Name, d4.Dep_Name
from tbl_department d1
join tbl_relation r1 on r1.Rel_Parent_ID = d1.Dep_ID
join tbl_department d2 on d2.Dep_ID = r1.Rel_Child_ID
left join tbl_relation r2 on r2.Rel_Parent_ID = d2.Dep_ID
left join tbl_department d3 on d3.Dep_ID = r2.Rel_Child_ID
left join tbl_relation r3 on r3.Rel_Parent_ID = d3.Dep_ID
left join tbl_department d4 on d4.Dep_ID = r3.Rel_Child_ID
where d1.Dep_Name = 'none'