------解决方案-------------------- 只是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,但是指定右表的筛选条件起作用..