2016-05-05 137 views
1

我想要在多個條件下使用左連接來連接兩個表。如何使用左連接和多個條件連接兩個表?

我有兩個STS_CD標誌ACIA

我想獲得數據,其中STS_CD='AC'但我在ACIA上得到它。

我的查詢是:

SELECT `bldr`.`id`  AS `bldr_ID`, 
     `bldr`.`sts_cd` AS `bldr_STS_CD`, 
     bldr.shrt_nm 
FROM `bldr` 
     LEFT JOIN `bldr_img` 
       ON `bldr`.`id` = `bldr_img`.`prnt_id` 
       AND `bldr_img`.`img_cat_cd` = 'LG' 
       AND `bldr`.`sts_cd` = 'AC' 
       AND `bldr_img`.`sts_cd` = 'AC' 
ORDER BY `bldr`.`id` 

我該怎麼辦呢?

enter image description here

+0

連接沒有任何意義,因爲您沒有從'bldr_img'表中選擇任何列。所有你可以用這種方法實現的是從'bldr'表中複製一些行。 –

回答

2

這是您的查詢:

SELECT bldr.ID as bldr_ID, bldr.STS_CD AS bldr_STS_CD,bldr.SHRT_NM 
FROM bldr LEFT JOIN 
    bldr_img 
    ON bldr.ID = bldr_img.PRNT_ID AND 
     bldr_img.IMG_CAT_CD = 'LG' AND 
     bldr.STS_CD = 'AC' AND 
     bldr_img.STS_CD = 'AC' 
ORDER BY bldr.ID; 

當使用LEFT JOIN,在表的條件應該去ON子句。第一張桌子上的條件應該在WHERE(當然,JOIN條件除外)。所以試試這個:

SELECT bldr.ID as bldr_ID, bldr.STS_CD AS bldr_STS_CD,bldr.SHRT_NM 
FROM bldr LEFT JOIN 
    bldr_img 
    ON bldr.ID = bldr_img.PRNT_ID AND 
     bldr_img.IMG_CAT_CD = 'LG' AND 
     bldr_img.STS_CD = 'AC' 
WHERE bldr.STS_CD = 'AC' 
ORDER BY bldr.ID; 

爲什麼?雖然這看起來很神祕,但它非常有意義。 A LEFT JOIN保留第一個表中的所有行,而不管ON子句的計算結果爲true,false還是NULL。它不知道條件是在第一張桌子上還是第二張桌子上。因此,第一個表格上的過濾器無效。

+0

非常感謝,有沒有辦法強大的MySQL查詢?任何參考鏈接 –