【问题标题】:SQL Recursive in Same Table to Find ParentSQL递归在同一个表中查找父级
【发布时间】:2012-03-05 23:46:35
【问题描述】:

如何找到我所有项目的 parentId (mySQL)? (可能有无限多层次的层次结构......不是最好的设计,但它是我正在使用的)

ID      PARENTID    NAME
9146    NULL        thing1
9147    NULL        thing2
9148    9146        thing3
9149    9148        thing4
9150    NULL        thing5
9151    9149        thing6
9152    9147        thing7

那么输出应该是:

ID     REAL_PARENTID
9146   NULL (or self 9146)
9147   NULL (or self 9147)
9148   9146
9149   9146
9150   NULL (or self 9150)
9151   9146
9152   9147

【问题讨论】:

  • 您需要上到顶层父级,还是层次结构中的上一级父级?没关系,我知道你需要登顶。
  • 这个问题的答案:stackoverflow.com/questions/3704130/recursive-mysql-query应该对你有用。
  • 你的例子不清楚。从发布的数据来看,您正在寻找的似乎是 just SELECT ID, PARENTID from table,仅此而已。有什么问题?
  • @Marc 不完全正确,请查看项目 ID 9149 和 9151。REAL_PARENTID 不同
  • @monkey-wrench 你能设计成当任何第一级子插入发生时,它会找到它的最后一个祖先并将其保存在oldest parent 列中吗?这样,对于任何后续子插入,您只需找到他们的直接父级并复制他们的 oldest parent 列。

标签: mysql sql recursive-query


【解决方案1】:

我实际上使用 MySQL 存储过程编程编写了树遍历脚本。

我在DBA StackExchange back in Oct 24, 2011回答了这样一个问题。它还包括样本数据。

玩得开心。

【讨论】:

    【解决方案2】:

    您可以使用 SQL CTE 表(递归查询)轻松完成此操作

    检查此以了解如何操作:

    http://msdn.microsoft.com/en-us/library/ms186243.aspx

    【讨论】:

    猜你喜欢
    • 2013-09-15
    • 2010-11-03
    • 1970-01-01
    • 1970-01-01
    • 2020-05-23
    • 2012-10-08
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    相关资源
    最近更新 更多