好像on与 结果条件没什么影响啊
------解决方案--------------------
只是left join中的过滤条件
------解决方案--------------------
1.执行顺序不一样,sql先过滤join on, 后过滤where。
2.执行结果不一样。tb1 left join tb2 ,如果 tb2没有满足的条件,用where则没有结果,但是用left join 则 会有结果。
------解决方案--------------------
inner join 是没有影响的.. left join 的on 条件 是对左表没有作用的,比如 a left join b on .. and a.id=1 这个a.id=1 对左表不起作用..即使左表a的id不是1也会被查询出来..而写在where里 就会有作用,会对临时表进行筛选.
right join 同理
------解决方案--------------------
left join是从关联表的角度出发来on被关联表 如果没找到对应关系 还是会显示出关联表的数据 但是用where的话 则不会显示数据
举个简单的例子吧
- SQL code
--表tb1 id name 1 a 2 b 3 c--表tb2 id type 2 12 select tb1.id,tb1.name,tb2.type from tb1 left join tb2 on tb1.id=tb2.id --可以查询出3行数据 id name type 1 a 2 b 12 3 c select tb1.id,tb1.name,tb2.type from tb1,tb2 where tb1.id=tb2.id--查询出1条数据 id name type 2 b 12
------解决方案--------------------
on 指定的是进行连接的条件。
where 指定的是连接后,结果集中记录的筛选条件。
------解决方案--------------------
1个是链接,1个条件
------解决方案--------------------
on 是连接条件..在这里指定左表的筛选条件是没有作用de,但是指定右表的筛选条件起作用..