自连接可能没有数据的列

Self join on column that may not have data

我有 MySQL table (menu_items) 个用于构建菜单的项目。请参阅下面的数据。每个菜单项都是 parent 或 child。带有 parent_id of 0 is a parent 的项目。带有 'parent_id' > 0 的项目是属于 'id' 对应于 'parent_id' 数据的项目的 child。

请在此处查看 SQLFiddle 以获取架构和测试数据:http://sqlfiddle.com/#!9/8ec6bc/1

我正在尝试创建一个查询,为我提供所有 21 个菜单项,以及 parent 菜单项的标题(如果存在)。如果项目本身是 parent.

,则 parent 菜单标题应该为空

我已经尝试了几种不同的自连接,如下所示,但无法取回我需要的结果。有什么想法吗?

SELECT mi1.*, mi2.title as parent_title  
FROM menu_items mi1 
left join menu_items mi2 on mi2.parent_id = mi1.id;

快搞定了,翻转连接关系。检查 child.parent_id 是否匹配 parent.id.

select mi1.*, mip.title as parent_title  
from menu_items mi
left join menu_items mip on mi.parent_id = mip.id;

Demonstration.

注意:使 parent_id 不为空,然后将没有 parents 的那些设置为幻数 0 是有问题的。我建议让 parent_id 可以为 null,并为 parents 将其设置为 null。 Demonstration.