代码之家  ›  专栏  ›  技术社区  ›  Alex

MySQL左连接,如果不是所有行都设置为不工作

  •  0
  • Alex  · 技术社区  · 9 年前

    我得到了以下查询。 这应该返回一行,但没有。

    不幸的是什么都没有。

    删除最后一个join子句时:

    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'
    

    编辑解决方案 : “juergen 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 
    

    我没有意识到,如果没有的话,我必须添加该子条款 它将变成普通连接。谢谢

    1 回复  |  直到 9 年前
        1
  •  0
  •   juergen d    9 年前

    left 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