多个left join执行顺序 1. 求教多个left join 怎么执行
eg:
select * from a left join b on a.abid = b.baid left join c on c.cbid = b.bcid
2.多个left join连接,记录条数是不是主表的条数
eg
select * from a
left join b on a.abid = b.baid
left join c on c.cbid = b.bcid
...
没有where语句 那么查询出来的结果集条数是不是等于a的记录条数 ------解决方案-------------------- 先说明2点:
1、left join是逻辑操作符,只用于保证“数据正确”
2、优化器才是最终决定执行顺序的地方,一般来说会按照你的意愿顺序去执行,但是并不完全能保证。
回答你的问题:
1. 求教多个left join 怎么执行
eg:
select * from a left join b on a.abid = b.baid left join c on c.cbid = b.bcid 顺序是先a,b组合成一个虚拟表,然后虚拟表再和C表关联
2.多个left join连接,记录条数是不是主表的条数
eg
select * from a
left join b on a.abid = b.baid
left join c on c.cbid = b.bcid
...
没有where语句 那么查询出来的结果集条数是不是等于a的记录条数 左联的意思是返回左表的数据,右表中不能匹配出来的数据以null标识,但是由于你C表是和B左联而不是和A左联,所以数量不一定是A的数量,看清楚,不一定而已 ------解决方案-------------------- 即使是A LOJ B的结果,记录条数也不一定等于A的记录条数,除非join predicate右边(也就是B表)的列是唯一的。 ------解决方案--------------------
------解决方案-------------------- 关于LEFT JOIN的内容 你可以去看看SQL SERVER 2005技术内幕。