2016-05-05 139 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查询?任何参考链接 –