在多张表连接时,都会生成一张中间表,然后再将这张临时表返回给用户。
在用left join中,on和where条件的区别如下:
(1)on条件是在生成中间表时使用的条件,它不管on中的条件是否为真,都会返回左表中的记录,右表中的记录如果不符合on条件,则显示为空。
(2)where条件是在中间表生成好之后,再对这张表进行过滤。这时已经和left join没有关系,不符合where条件的就会被过滤掉。
例子:
表balevent:账户余额表
month:月份
ACCOUNT:账户
目标:查询201906月有发生余额变动的账号,并且在201907月没发生余额变动的账号
语句一:正确的写法
select a.ACCOUNT from balevent a left join balevent b
on a.ACCOUNT=b.ACCOUNT and b.MONTH='201907'
where a.MONTH='201906' and b.ACCOUNT is null ;
语句二:错误的写法,查询不出来结果
select a.ACCOUNT from balevent a left join balevent b
on a.ACCOUNT=b.ACCOUNT
where a.MONTH='201906' and b.MONTH='201907' and b.ACCOUNT is null ;
注:
如果是用in和not in语句:
select * from balevent a where account not in (select account from balevent b where b.MONTH='201906') and A.MONTH='201907';
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)