如何使这种亲子关系发挥作用?

时间:2012-10-25 15:40:07

标签: mysql parent-child ireport

使用MySQL如何使这种层次结构有效?

  • Parent的ID为100.此Parent的ParentID为0。
  • Child的ID为101. ParentID为100。
  • SubEntity的ID为105. ParentID为100。
  • Subentity的孩子的ID为106.他们的ParentID是105。

此查询将插入iReport。目前,Subentity及其子女不会卷入家长。

这就是我最终的目的:

`Select
case
when FC.ParentType = 'PARENT' then FC.FundCode
when FB.ParentType = 'PARENT' then FB.FundCode
when F.ParentType = 'PARENT' then F.FundCode
else 0 end as `ParentID`,
case
when FB.ParentType = 'SUBFUND' then FB.FundCode
when F.ParentType = 'SUBFUND' then F.FundCode
else 0 end as `SubfundID`,
case
when FB.ParentType = 'CHILD' then FB.FundCode
when F.ParentType = 'CHILD' then F.FundCode
else 0 end as `Children`,            
F.FundName     
From Fund F
join Fund FB on F.ParentId = FB.FundCode
join Fund FC on FB.ParentID = FC.FundCode`

2 个答案:

答案 0 :(得分:0)

是否有一个静态数字来管理这个父子关系有多少级别?

是:使用递归LEFT JOIN次X次。

SELECT *
FROM table t1 LEFT JOIN table t2
  ON t1.id = t2.parent_id
  LEFT JOIN table t3
  ON t2.id = t3.parent_id
  ...

否:使用单独的查询完成此操作,直到您根据需要充实父/子对象为止。确保你有适当的检查,以避免循环,即。孩子是其父母的父母。

答案 1 :(得分:0)

您可以为此方案使用递归CTE 。看看这个链接,它给出了一个很好的例子。

http://blog.sqlauthority.com/2012/04/24/sql-server-introduction-to-hierarchical-query-using-a-recursive-cte-a-primer/