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

标签 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

最佳答案

这是您的查询:

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/

相关文章:

mysql - 如何在SQL中选择表中不存在的记录?

php - 如何在一个字段中存储一个 Json 数据?

MySQL:只选择一些分组的行

mysql - 按 200 行分组,从最新的 ID 开始

java - 如何在hql查询中选择对象的一部分?

PHP - 如何连接两个数组

PHP 7.1 fatal error : Allowed memory size of 268435456 bytes exhausted

mysql - 在 Zen Cart 中创建联接和 COUNT()

mysql - 可以跨表索引吗?

mysql - (My)SQL 如何评估链式 LEFT/INNER JOIN?