我想在多个条件下使用左连接加入两个表。
我有两个STS_CD标志AC
或IA
。
我希望获得STS_CD='AC'
的数据,但我在AC
或IA
上都有。
我的查询是:
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`
我该怎么做?
答案 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
。它没有"知道"条件是在第一个表还是第二个表上。因此,第一个表格上的过滤器无效。