在Mysql的 left/right join 添加where条件

本文介绍了在MySQL中如何正确使用LEFT JOIN及WHERE子句来添加条件。当查询涉及多表连接时,LEFT JOIN会生成临时表,WHERE条件则针对临时表进行过滤。错误地将左表条件放在ON后面会导致条件不生效,而将右表条件放在WHERE中可能造成数据丢失。正确的做法是将左表条件置于WHERE后,右表条件放在ON后。通过示例解释了这一概念,帮助读者理解并避免在SQL查询中常见的误区。
摘要由CSDN通过智能技术生成

1.如何在mysql中使用left/right join 添加where条件?相信很多人不知道怎么做,下面我来告诉大家如何添加where条件。

1.1有A和B两张表,一个A对应多个B,现在查询有效的A对应的B,两个表都有状态status字段

我们通常会这样写如下:

SELECT a.*,b.* FROM A a LEFT JOIN B b ON a.id=b.id And a.status=1 AND b.status=1

SELECT a.*,b.* FROM A a LEFT JOIN B b ON a.id=b.id WHERE a.status=1 AND b.status=1第一种写法主表的a.status=1条件不生效。

第二种写法可能会导致一条数据都查不出来。

知识点如下:

  • 多表左连接和右连接会生成一张临时表,
  • where 条件是针对最后的临时表进行过滤的
  • on条件是针对非主表进行过滤的

正确的写法如下:

SELECT a.*,b.* FROM A a LEFT JOIN B b ON a.id=b.id and b.status=1 WHERE a.status=1 

结论:

1.对左表的条件要添加在where 后面,不能放在on后面,因为左表属于主表

2.对右表添加条件是放在ON后面,在where中添加可能会导致数据不正确,因为where是临时表的过滤。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

苹水相峰

你的打赏是对我最大的肯定

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值