自连接可能没有数据的列
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;
注意:使 parent_id
不为空,然后将没有 parents 的那些设置为幻数 0 是有问题的。我建议让 parent_id
可以为 null,并为 parents 将其设置为 null。 Demonstration.
我有 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;
注意:使 parent_id
不为空,然后将没有 parents 的那些设置为幻数 0 是有问题的。我建议让 parent_id
可以为 null,并为 parents 将其设置为 null。 Demonstration.