今天在写SQL语句时发现一个问题
select count(1) as count from smbms_bill b left join smbms_provider p on b.providerId = p.id
and b.providerId = 2 and b.isPayment = 1
这句sql后面的 and b.providerId = 2 and b.isPayment = 1 并没有起作用。
解释
如果 把这句sql这么改就对了
select count(1) as count from smbms_bill b left join smbms_provider p on b.providerId = p.id
where b.providerId = 2 and b.isPayment = 1
1.where 是在两个表join完成后,再附上where条件
2.而 and 则是在表连接前过滤A表或B表里面哪些记录符合连接条件,同时会兼顾是left join还是right join。
假如是左连接的话,如果左边表的某条记录不符合连接条件,那么它不进行连接,但是仍然留在结果集中(此时右边部分的连接结果为NULL)。
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
3.建议尽量用where来过滤条件
标签:count,join,..,providerId,smbms,where,连接 From: https://www.cnblogs.com/fu-heng/p/16879495.html