2016-11-21 49 views
0

我收到以下查詢。 這應該返回一行,但它不。MySQL左加入,如果不是所有行都設置不成功,結果

不幸的是沒有。

當我刪除最後一個連接語句:

LEFT JOIN `serene_pagecontent` ON `serene_pageorder`.`pageorder_id` = `serene_pagecontent`.`pagecontent_link` 

我得到的結果。但是,當它添加它不。 據我所知在加入之前添加LEFT應該提供結果,即使其中一個字段丟失。

SELECT * FROM `serene_page` 
LEFT JOIN `serene_pageoptions` ON `serene_page`.`page_id` = `serene_pageoptions`.`pageoptions_link` 
LEFT JOIN `serene_pagetitle` ON `serene_page`.`page_id` = `serene_pagetitle`.`pagetitle_link` 
LEFT JOIN `serene_pageorder` ON `serene_page`.`page_id` = `serene_pageorder`.`pageorder_link` 
LEFT JOIN `serene_pagecontent` ON `serene_pageorder`.`pageorder_id` = `serene_pagecontent`.`pagecontent_link` 
WHERE `page_id` = 34 AND `pageoptions_language` = 'NL' AND `pagetitle_language` = 'NL' AND `pagecontent_language` = 'NL' 

有誰能告訴我我缺少什麼。

編輯

WHERE `serene_page`.`page_id` = 34 
    AND serene_pageoptions`.`pageoptions_language` = 'NL' 
    AND serene_pagetitle`.`pagetitle_language` = 'NL' 
    AND serene_pagecontent`.`pagecontent_language` = 'NL' 

編輯解決方案解決方案通過 「克林斯曼d」

 SELECT * FROM `serene_page` 

    LEFT JOIN `serene_pageoptions` ON `serene_page`.`page_id` =`serene_pageoptions`.`pageoptions_link` AND 
`serene_pageoptions`.`pageoptions_language` = 'NL'  
    LEFT JOIN `serene_pagetitle` ON `serene_page`.`page_id` = `serene_pagetitle`.`pagetitle_link` AND 
`serene_pagetitle`.`pagetitle_language` = 'NL'  

    LEFT JOIN `serene_pageorder` ON `serene_page`.`page_id` = `serene_pageorder`.`pageorder_link` 


    LEFT JOIN `serene_pagecontent` ON `serene_pageorder`.`pageorder_id` = 
`serene_pagecontent`.`pagecontent_link` AND 
`serene_pagecontent`.`pagecontent_language` = 'NL' 

    WHERE `serene_page`.`page_id` = 34 

我不知道的事實,我不得不添加子條款如果不是 它將轉爲正常連接。謝謝!!

+0

「where」子句中的條件 - 連接表的這些列是什麼? –

+0

你的意思是編輯? –

+0

有沒有必要回答這個問題。它只是混淆。 –

回答

0

如果你left join你需要把連接表的條件放到JOIN中。否則,左連接變爲內連接

SELECT * 
FROM serene_page s 
LEFT JOIN serene_pageoptions po ON s.page_id = po.pageoptions_link 
           AND po.pageoptions_language = 'NL' 
LEFT JOIN serene_pagetitle pt ON s.page_id = pt.pagetitle_link 
           AND pt.pagetitle_language = 'NL' 
LEFT JOIN serene_pageorder o  ON s.page_id = o.pageorder_link 
LEFT JOIN serene_pagecontent c ON o.pageorder_id = c.pagecontent_link 
           AND c.pagecontent_language = 'NL' 
WHERE s.page_id = 34