我有以下表格(仅包含必要的列),我正在寻找执行查询。一些说明:
1)表1与表2和表1具有一对一的关系。 3,公共密钥是menu_id。
表4-6稍微复杂一些:
2)表1中有一对多表4,因此一个菜单可以有多个类别。
3)表4与表5有一对多,因此一个类别(多个以上)可以有很多项目。
4)表5再次与表6一对多,所以一个项目可以有很多子项。
Table 1: -- user_menu --
menu_id
Table 2: -- menu_details --
menu_id
Table 3: -- menu_times --
menu_id
Table 4: -- menu_categories --
menu_category_id
menu_id
Table 5: -- menu_items --
menu_item_id
menu_category_id
Table 6: -- menu_subitems--
menu_subitem_id
menu_item_id
问题:我需要一个sql查询,它将从表中获取所有相关数据(所有列,我还没有包含它们,只是主键行),用于表1中的特定menu_id。这很简单,但是我在一对多的部分中苦苦挣扎,并在同一个查询中获取数据。
我期待这样的事情。在menu_id = 2的情况下,它将获取关联的行数据(所有列)。我已缩短了适合的关键名称。
user_menu | menu_details | menu_times | menu_categories | menu_items | menu_subitems
-------------------------------------------------------------------------------------
menu_id=2 - menu_id=2 - menu_id=2 -< cat_id=1 -< item_id=1 subitem_id=1
cat_id=2 -< item_id=2 -< subitem_id=2
cat_id=3 item_id=3 subitem_id=3
item_id=4 -< subitem_id=4
item_id=5 -< subitem_id=5
subitem_id=6
subitem_id=7
(我已在上面缩短了。正确的名字在第一个列表中,所以请使用这些名称。)
ID指的是我需要关联列数据的主键行。再次澄清如果我要查询menu_id = 2,我将从表2&amp;获得menu_id = 2行。 3.我还将在menu_categories表中获取类别WHERE menu_id = 2,在menu_item表中使用menu_category_id = x的item_id行,以及子项表中的menu_item表中的item_id = x的子项行。
我计划将结果复制到数组并将其传回。只需要查询位(我假设加入,但我不确定哪个是相关的。)
谢谢!
答案 0 :(得分:1)
是的,您可以使用join,使用键引用加入它们应该像这样输出:
select A.menu_id, B.menu_id, C.menu_id, D.menu_category_id, E.menu_item_id,
F.menu_subitem_id
from user_menu A
join menu_details B on A.menuid = B.menuid
join menu_times C on B.menuid = C.menuid
join menu_categories D on C.menuid = D.menuid
join menu_items E on D.menu_category_id = E.menu_category_id
join menu_subitems F on E.menu_item_id = F.menu_item_id
where A.menu_id = 2