好像on与 结果条件没什么影响啊

解决方案 »

  1.   

    只是left join中的过滤条件
      

  2.   

    1.执行顺序不一样,sql先过滤join on, 后过滤where。
    2.执行结果不一样。tb1 left join  tb2 ,如果 tb2没有满足的条件,用where则没有结果,但是用left join 则 会有结果。
      

  3.   

    inner join  是没有影响的.. left join  的on 条件 是对左表没有作用的,比如 a left join b on .. and a.id=1     这个a.id=1 对左表不起作用..即使左表a的id不是1也会被查询出来..而写在where里  就会有作用,会对临时表进行筛选.
    right join 同理
      

  4.   

    left join是从关联表的角度出发来on被关联表  如果没找到对应关系  还是会显示出关联表的数据  但是用where的话  则不会显示数据举个简单的例子吧--表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
      

  5.   


    left join 的on 条件 是对左表没有作用的,就是说对查询结果没影响,那有什么用呢?
      

  6.   

    on 指定的是进行连接的条件。
    where 指定的是连接后,结果集中记录的筛选条件。
      

  7.   

    on 是连接条件..在这里指定左表的筛选条件是没有作用de,但是指定右表的筛选条件起作用..
      

  8.   

    存在的即是有道理的,假设有如下业务逻辑,那么 left join 就会发挥作用。A表是用户表
    B表是用户交易记录表
    不是所有的用户都会有交易记录,如果我想查询全部用户的交易记录,没有记录的显示0
    A left join B 就是最终选择。