外连接查询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条件过滤掉多余的记录然后再做链接,但是在外连接查询时候就不能做到如此优化了。
另外经验真是太重要了,尤其是在调试程序的时候,显得格外的高效!
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条件过滤掉多余的记录然后再做链接,但是在外连接查询时候就不能做到如此优化了。
另外经验真是太重要了,尤其是在调试程序的时候,显得格外的高效!
相关文章推荐
- 连接查询,条件在on和where后面的区别
- sql 左连接查询条件and与where
- Mysql 左连接查询条件位置不同造成数据查不出来
- sql连接查询中,where关键字的位置
- 无合适where条件过滤时尽量选择order by后的字段以驱动表进行查询 推荐
- SQL优化经典案例----外连接where条件位置优化
- sql连接查询中,where关键字的位置讲解
- sql中外连接条件位置不同导致的查询结果不过
- 数据库左连接left join、右连接right join、内连接inner join on 及 where条件查询的区别
- sql连接查询中,where关键字的位置讲解
- sql连接查询中,where关键字的位置
- SQL优化经典案例----外连接where条件位置优化
- hibernate set 中加入where 对子表进行条件查询
- 分享一些常见的SQL语句,包含单表查询、高级查询(连接查询、复合条件查询、嵌套查询等)。
- HQL语句中的 条件 where后支持数据中表字段的名字查询 和 访问web目录
- sql选择条件查询case when else end
- 表的复杂查询----多表查询、两表的条件连接、内连接(自连接)、左外连接、右外连接、子查询、分页查询
- 批次查找策略select * from 存取顺序找到的批次表table where 选择条件B sort by 排序C
- 数组 复制 元素个数 连接 查找 查询位置
- SQL查询语句--from--where--联合查询--连接--删除