您的位置:首页 > 其它

外连接查询where条件位置选择

2010-05-26 20:10 260 查看
初始的写法是这样的 select

t.OfficeSupplyID,ApplyCount -IsNull(SupplyCount,0) as ApplyAccountfrom @TB t left join (select * from Inventory ) i on t.OfficeSupplyID=i.OfficeSupplyIDwhere DomainAccount='lirz'

@TB里有十四条记录,Inventory 有17条记录可是执行的结果只有五条这显然不是left join所描述的那样,左边的表的记录全部被选中。很是疑惑。后来找到老大调试最后修改成如下方式

select

t.OfficeSupplyID,ApplyCount -IsNull(SupplyCount,0) as ApplyAccountfrom @TB t left join (select * from Inventory where DomainAccount='lirz') i on t.OfficeSupplyID=i.OfficeSupplyID结果显示正常

可是一时也找不到第一种写法的错误在哪里。

后来通过显示全部的列发现只有五条记录的DomainAccount='lirz',这才恍然大悟,原来是联机查询的结果被where条件给过滤了。也就是说在做连接查询尤其是外联查询时首先应用的条件是连接,然后才是where条件,不同的where位置产生截然不同的结果。据老大说SqlServer有时候会优化查询条件就是先应用where条件过滤掉多余的记录然后再做链接,但是在外连接查询时候就不能做到如此优化了。

另外经验真是太重要了,尤其是在调试程序的时候,显得格外的高效!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: