【问题标题】:Mysql query to retrieve child and parent data from the same tableMysql查询从同一个表中检索子数据和父数据
【发布时间】:2015-06-18 12:36:27
【问题描述】:

我有一个mysql表,如下图。

现在我想查询这个表,以便我得到如下数据

如果没有父级,则必须将父级填充为“NONE”或空。我如何实现这个查询?这甚至可能吗?我和朋友讨论过这个问题,但仍然没有答案。任何帮助,将不胜感激。谢谢

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您必须使用 LEFT JOIN 将表与自身连接起来,这将返回左表中的所有行以及第二个表中与连接条件匹配的行:

    Select
      t1.ID,
      t1.Name,
      t2.Name AS Parent,
      t1.Remarks
    From
      yourtable t1 LEFT JOIN yourtable t2
      ON t1.parent_id = t2.id
    

    你也可以使用COALESCE(t2.name, 'NONE') AS Parent在没有匹配的时候返回字符串NONE。

    【讨论】:

      【解决方案2】:

      在 MS SQL Server 中,您可以使用 CTE (Common Table Expression) - 分层查询来检索子级和叶级子级。但是我的sql不支持CTE。

      请参考this问题,代表MySQL不支持CTE。
      This answer将帮助您获取该孩子的所有孩子和孩子。您需要创建分层查询。

      【讨论】: