我想在多个条件下使用左连接来连接两个表。
我有两个 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`
我该怎么做?
最佳答案
这是您的查询:
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;
为什么?虽然这看起来很神秘,但却非常有道理。 LEFT JOIN
保留第一个表中的所有行不管 ON
子句的计算结果是 true、false 还是 NULL
。它“不知道”条件是在第一个表上还是在第二个表上。因此,第一个表上的过滤器无效。
关于mysql - 如何使用具有多个条件的左连接来连接两个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37050355/