【问题标题】:How to join two tables using left join with multiple conditions?如何使用具有多个条件的左连接连接两个表?
【发布时间】:2016-08-31 05:26:58
【问题描述】:

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

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

我该怎么做?

【问题讨论】:

  • 连接没有任何意义,因为您没有从bldr_img 表中选择任何列。您可以通过这种方式实现的所有目的是从bldr 表中复制一些行。

标签: mysql join


【解决方案1】:

这是您的查询:

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 子句的计算结果是真、假还是NULL。它不“知道”条件是在第一张桌子上还是在第二张桌子上。因此,第一个表上的过滤器无效。

【讨论】:

  • 非常感谢,有什么方法可以增强 mysql 查询吗?任何参考链接
猜你喜欢
  • 2015-01-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-10
相关资源
最近更新 更多