【发布时间】:2015-06-18 12:36:27
【问题描述】:
我有一个mysql表,如下图。
现在我想查询这个表,以便我得到如下数据
如果没有父级,则必须将父级填充为“NONE”或空。我如何实现这个查询?这甚至可能吗?我和朋友讨论过这个问题,但仍然没有答案。任何帮助,将不胜感激。谢谢
【问题讨论】:
我有一个mysql表,如下图。
现在我想查询这个表,以便我得到如下数据
如果没有父级,则必须将父级填充为“NONE”或空。我如何实现这个查询?这甚至可能吗?我和朋友讨论过这个问题,但仍然没有答案。任何帮助,将不胜感激。谢谢
【问题讨论】:
您必须使用 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。
【讨论】:
在 MS SQL Server 中,您可以使用 CTE (Common Table Expression) - 分层查询来检索子级和叶级子级。但是我的sql不支持CTE。
请参考this问题,代表MySQL不支持CTE。
This answer将帮助您获取该孩子的所有孩子和孩子。您需要创建分层查询。
【讨论】: