2012-03-19 111 views
58

我有這樣的跨數據庫查詢...差異在MySQL JOIN VS LEFT JOIN

SELECT 
      `DM_Server`.`Jobs`.*, 
      `DM_Server`.servers.Description AS server, 
      digital_inventory.params, 
      products.products_id, 
      products.products_pdfupload, 
      customers.customers_firstname, 
      customers.customers_lastname 
     FROM `DM_Server`.`Jobs` 
     INNER JOIN `DM_Server`.servers ON servers.ServerID = Jobs.Jobs_ServerID 
     JOIN `cpod_live`.`digital_inventory` ON digital_inventory.jobname = Jobs.Jobs_Name 
     JOIN `cpod_live`.`products` ON products.products_pdfupload = CONCAT(digital_inventory.jobname, ".pdf") 
     JOIN `cpod_live`.`customers` ON customers.customers_id = products.cID 
     ORDER BY `DM_Server`.`Jobs`.Jobs_StartTime DESC LIMIT 50 

它運行良好,直到我讓他們LEFT JOIN秒。我認爲,通過不指定一種類型的連接,它被假定爲LEFT JOIN。這不是這種情況嗎?

+0

請顯示你得到的錯誤,thx。 – 2012-03-19 12:41:36

回答

159

我認爲,通過不指定一種類型的連接,它被認爲是一個左連接。這不是這種情況嗎?

不,默認連接是INNER JOIN。

這裏是a visual explanation of SQL joins

內連接

enter image description here

左加入

enter image description here

+0

通過跨數據庫TS可能意味着他的查詢使用來自多個數據庫的表。 – 2012-03-19 12:47:36

+0

@Lex:謝謝,我編輯過。 – 2012-03-19 12:47:53

+2

爲什麼'LEFT JOIN'比'INNER JOIN'要慢得多? – Webnet 2012-03-19 12:55:51

13

號當沒有指定類型,一個INNER JOIN被使用。閱讀差異; wikipedia

9

如果您只指定JOIN,我相信默認值爲INNER JOIN

7

如果您剛纔在默認查詢時提到了JOIN,它將被視爲 作爲INNER JOIN。

左連接:左連接將從左表中獲取所有元素,並僅將來自右表的匹配記錄作爲Follows。 例如:

SELECT column_name(s) 
FROM table_name1 #(Left table) 
LEFT JOIN table_name2 #(Right table) 
ON table_name1.column_name=table_name2.column_name 

希望這有助於。