SQL like 查询问题 急……

cwaspnet 2012-12-27 10:36:28
现在有这样一个查询

select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 and a.b like 'E%'

select * from (
select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 ) temp where b like 'E%'


这两个查询语句的数据条数不一样,求原因?
...全文
390 22 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
langxingcs 2013-01-11
  • 打赏
  • 举报
回复
看执行计划是唯一的出路
langxingcs 2013-01-11
  • 打赏
  • 举报
回复
你把这两张表的索引重建一下或者重新统计一下,或者看看执行计划怎么走的
查理001 2013-01-11
  • 打赏
  • 举报
回复
引用 3 楼 galenkeny 的回复:
第一个语句是把符合a.b like 'E%'这个条件的才能作为联合的对象 而第二个语句是先a,f联合出来的数据在筛选符合where条件的 数据当然不一样,你可以用一个简单的例子看下区别
你说的不对吧,select语句的执行顺序是,先两张表的笛卡尔积,然后on筛选,然后where筛选吧
BobHe 2013-01-08
  • 打赏
  • 举报
回复

select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 and a.b like 'E%'

select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0  where a.b like 'E%'

select * from (
select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 ) temp where b like 'E%'
楼主测试下。 条件写的位置不对,不是连接条件,是过滤条件。。。
FelixOu 2013-01-07
  • 打赏
  • 举报
回复
执行顺序不同了.. 可能是在于FROM的来源不同了.
潇洒王子 2013-01-06
  • 打赏
  • 举报
回复
没看出有什么不一样
sqlkxr 2012-12-28
  • 打赏
  • 举报
回复
应该是一样的。个人测试了几条数据
  • 打赏
  • 举报
回复
SQL Select语句完整的执行顺序: 

1、from子句组装来自不同数据源的数据; 
2、where子句基于指定的条件对记录行进行筛选; 
3、group by子句将数据划分为多个分组; 
4、使用聚集函数进行计算; 
5、使用having子句筛选分组; 
6、计算所有的表达式; 
7、使用order by对结果集进行排序。 


另外:一个查询语句各个部分的执行顺序: 
--8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> 
--(1)  FROM <left_table> 
--(3)    <join_type> JOIN <right_table> 
--(2)      ON <join_condition> 
--(4)  WHERE <where_condition> 
--(5)  GROUP BY <group_by_list> 
--(6)  WITH {CUBE | ROLLUP} 
--(7)  HAVING <having_condition> 
--(10) ORDER BY <order_by_list> 

看一看SQL 语句执行的顺序你就知道了啥
cwaspnet 2012-12-27
  • 打赏
  • 举报
回复
引用 3 楼 galenkeny 的回复:
第一个语句是把符合a.b like 'E%'这个条件的才能作为联合的对象 而第二个语句是先a,f联合出来的数据在筛选符合where条件的 数据当然不一样,你可以用一个简单的例子看下区别
但是在我不加like条件的时候 这两个语句的查询结果是一样的 在这个前提下在加like条件查询出来的结果也不一样么
以学习为目的 2012-12-27
  • 打赏
  • 举报
回复
第一个语句是把符合a.b like 'E%'这个条件的才能作为联合的对象 而第二个语句是先a,f联合出来的数据在筛选符合where条件的 数据当然不一样,你可以用一个简单的例子看下区别
cwaspnet 2012-12-27
  • 打赏
  • 举报
回复
晕 没人遇到过这种情况?????
cwaspnet 2012-12-27
  • 打赏
  • 举报
回复
当把like放在子查询里面时要比把like放在子查询外得到的数据条数多
知识青年 2012-12-27
  • 打赏
  • 举报
回复
引用 11 楼 cwaspnet 的回复:
真TM郁闷,前几批数据一直是这样查询的,对比明细汇总都是没有问题的,这次数据查询的时候就出问题了,更TM气人的是用这个语句在去查前几批数据,数据就出问题了,查出来的结果跟前面查出来的结果对不上,擦,都怀疑我是不是出现幻觉了……我现在怀疑前几批数据是怎么导出来的
贴点不一样的结果看看。
美到心痛 2012-12-27
  • 打赏
  • 举报
回复
我也看不出問題,你把多出來的記錄篩選出來,然后看一下這些記錄為什麽沒有在另一個查詢中出來 希望能把記錄貼幾條出來給大家看看
程序猿GG 2012-12-27
  • 打赏
  • 举报
回复
比较一下数据吧,看看区别的部分是哪些, 从语句本身来看,还真看不出问题。
z1067dd 2012-12-27
  • 打赏
  • 举报
回复
galenkeny 第二个查询语句中的select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0是当做一个表来使用,在这张表中再根据条件显示相应的数据
cwaspnet 2012-12-27
  • 打赏
  • 举报
回复
真TM郁闷,前几批数据一直是这样查询的,对比明细汇总都是没有问题的,这次数据查询的时候就出问题了,更TM气人的是用这个语句在去查前几批数据,数据就出问题了,查出来的结果跟前面查出来的结果对不上,擦,都怀疑我是不是出现幻觉了……我现在怀疑前几批数据是怎么导出来的
cwaspnet 2012-12-27
  • 打赏
  • 举报
回复
引用 楼主 cwaspnet 的回复:
现在有这样一个查询 select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 and a.b like 'E%' select * from ( select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 ) temp where b like '……
执行顺序肯定是不一样的 现在的问题是这样的 统计时,同一个人的一批a.b字段是一样的,经过统计分组后,这个人有多条数据,在不用like条件时,语句查出的结果一直,在加上like条件时,这个人只有一部分数据出来了 另一部分通过like条件时不能筛选出来 问题是使用like条件的字段值都是一样的……
知识青年 2012-12-27
  • 打赏
  • 举报
回复
两个语句的执行结果应该是一样的
以学习为目的 2012-12-27
  • 打赏
  • 举报
回复
引用 4 楼 cwaspnet 的回复:
引用 3 楼 galenkeny 的回复:第一个语句是把符合a.b like 'E%'这个条件的才能作为联合的对象 而第二个语句是先a,f联合出来的数据在筛选符合where条件的 数据当然不一样,你可以用一个简单的例子看下区别 但是在我不加like条件的时候 这两个语句的查询结果是一样的 在这个前提下在加like条件查询出来的结果也不一样么 ……
你不加like条件 这句select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 和 这句select * from ( select a.a,a.b.a.c from a inner join f on a.id=f.id where a.c>0 ) temp本来就是一样的啊
加载更多回复(2)

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧