2013-03-02 53 views
1

我有一個連接幾個表的查詢。在mySQL查詢中使用正確的連接

沒有選定的列是可以空的,所以最好使用哪種類型的連接?

這裏的查詢:

SELECT ir.range_name, it.item_type, oi.itemQuantity, i.item_value 
FROM orders o 
JOIN order_items oi ON oi.orderId = o.id 
JOIN items i ON i.id = oi.itemNumber 
JOIN item_types it ON it.id = i.item_type 
JOIN item_ranges ir ON ir.id = i.item_name 
WHERE o.id = 1; 

如果我已經成功地得到正確的答案,請讓我知道!

+1

我認爲內連接總是更好 – DevelopmentIsMyPassion 2013-03-02 14:04:37

+0

最好的連接類型或查詢通常取決於您想要實現的內容。該查詢看起來非常合理,但我無法知道它是否會按照您的要求進行操作。 – IMSoP 2013-03-02 14:07:13

+0

取決於您的需求 - 您的上述查詢可能是您正在尋找的。內連接比外連接快。所以如果這返回你想要的,你的狀態很好。 – sgeddes 2013-03-02 14:07:26

回答

2

您正在使用的語法是一個INNER JOIN。這種類型的連接返回每個表中的匹配行。

這意味着,你必須確保你orders具有在order_items匹配的行,那麼你的order_items行必須等,如果沒有,那麼你將不會返回任何行匹配items。所以你可能不得不使用LEFT JOIN來代替。即使在加入的表中沒有匹配的行,也會返回orders表中的所有行。

SELECT ir.range_name, 
    it.item_type, 
    oi.itemQuantity, 
    i.item_value 
FROM orders o 
LEFT JOIN order_items oi ON oi.orderId = o.id 
LEFT JOIN items i ON i.id = oi.itemNumber 
LEFT JOIN item_types it ON it.id = i.item_type 
LEFT JOIN item_ranges ir ON ir.id = i.item_name 
WHERE o.id = 1; 

這裏是一個偉大visual explanation of joins,如果你需要幫助學習正確的語法。

注意:您也可以混合使用JOIN類型。因此,您可以在ordersorder_items之間使用INNER JOIN,但在其他某些表上使用LEFT JOIN。這實際上取決於你的數據以及你試圖返回的結果。

1

您正在查看的JOIN類型是LEFT JOIN

說明它更短,INNER JOIN只檢索另一個表上至少有一個匹配值的行。如果您要加入兩個以上的表格,則該行必須在每個表格上至少有一個匹配項,以便將記錄顯示在結果列表中。

然而,LEFT JOIN顯示器上左側的所有記錄ORDERS)表中的記錄是否有對其他表不匹配的行。

SELECT ir.range_name, it.item_type, oi.itemQuantity, i.item_value 
FROM orders o 
     LEFT JOIN order_items oi ON oi.orderId = o.id 
     LEFT JOIN items i ON i.id = oi.itemNumber 
     LEFT JOIN item_types it ON it.id = i.item_type 
     LEFT JOIN item_ranges ir ON ir.id = i.item_name 
WHERE o.id = 1 

爲了進一步獲得更多的知識有關加入,請訪問以下鏈接: