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是临时表的过滤。