如何使用具有多个条件的左连接来连接两个表?

时间:2016-05-05 12:13:36

标签: mysql join

我想在多个条件下使用左连接加入两个表。

我有两个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

1 个答案:

答案 0 :(得分: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时, second 表中的条件应包含在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;

为什么呢?虽然这看起来很神秘但是很有道理。 LEFT JOIN保留第一个表中的所有行,无论 ON子句是否计算为true,false或甚至NULL。它没有"知道"条件是在第一个表还是第二个表上。因此,第一个表格上的过滤器无效。