SELECT * from HR.Employees
CROSS JOIN Sales.Orders
WHERE Employees.empid=5
ORDER BY Employees.empid
返回830行记录。SELECT * from HR.Employees a
left JOIN Sales.Orders b
on a.empid=5
返回了838行记录。
SELECT * from HR.Employees a
left JOIN Sales.Orders b
on a.empid=5
WHERE a.empid <>5
ORDER BY a.empid
查询看了下,多出来的8行记录是,左连接添加orders记录的null记录,
为什么会这样呢?
不是说连接时在笛卡尔积的基础上进行过滤的吗?那么两个查询返回的记录行数应该一致才对、

解决方案 »

  1.   

    这个和查询顺序有关,先ON再where
      

  2.   

    SELECT * from HR.Employees a
    left JOIN (先过滤那8条的语句)b
    on a.empid=5
      

  3.   

    SELECT * from HR.Employees a
    left JOIN Sales.Orders b
    --on改为
    on 1=1
    where
     a.empid=5
      

  4.   

    这个跟sql语句的执行顺序有关在不加WHERE Employees.empid=5,这个条件的情况下,结果是一样的参考:http://www.cnblogs.com/summer_adai/archive/2011/10/28/2227605.html
      

  5.   

    left join 是什么连接?
    左边全部,右边符合条件所以你加上了WHERE a.empid <>5
    是不一样的。没有where 是,HR.Employees 表所有的数据都出来
      

  6.   

    建议楼主看一下inner join 、left join 、right join相关的书吧
    尤其注意left join 时条件放在on 后面跟放在where 后面是不一样的