2014-07-19 181 views
0

我有下面的表(只包括必要的列),我正在尋找執行查詢。一些說明:在SQL中一起實現一對一和一對多查詢

1)表1與表2 & 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獲取menu_id = 2行& 3.我還將在menu_categories表中獲取WHERE menu_id = 2的類別,item_id rows where menu_category_id = x in menu_item表和子項目表中子項目行(其中item_id = x來自menu_item表)。

我打算將結果複製到數組並將其傳回。只需要查詢位(我假設加入,但我不知道哪裏是相關的)。

謝謝!

+0

MySQL是不是SQL服務器 – podiluska

+0

針對此downvote?幾乎不公平。我給這個問題添加了相關的標籤(需要Sql語句),涵蓋了一系列的技術。然而,我對包含'sql server'標籤的混淆表示歉意,現在已經刪除。 –

回答

1

是的,你可以使用加入,加入他們使用鍵引用應該將它輸出這樣的:

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 
+0

謝謝!需要做更多的測試,但它似乎是完美的。非常感激。 –