为什么执行结果不一样

xuguv 2012-11-06 05:51:13
语句一
select a.XX……,sum(b.XX)…… from a left jion (select 一大堆sql,从若干表里取若干数据) b
where a.xx=b.xx

语句二
先把 (select 一大堆sql,从若干表里取若干数据) 做成一个view。例如 create view VB as select 一大堆是sql

然后再
select a.XX……,sum(b.XX) …… from a left jion VB b
where a.xx=b.xx

这样出来的结果,居然不一样。
这是为什么?

以前曾经遇到过,但是N年没搞数据库,又忘了。
...全文
116 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
dd_2012 2012-11-07
  • 打赏
  • 举报
回复
视图里面不允许有带where条件,而“select 一大堆sql”这里面可能有where条件
jflanmay 2012-11-07
  • 打赏
  • 举报
回复
这个绝对是一样。从sql的解析原理来说,根本没有任何差别。 LZ,看下是不是有什么字段漏了或者拼错了。
發糞塗牆 2012-11-06
  • 打赏
  • 举报
回复
如果真这样,那可能视图里面做了进一步筛选
以学习为目的 2012-11-06
  • 打赏
  • 举报
回复
if object_id('tb1')is not null
drop table tb1
go
create table tb1 (id int,value int)
insert into tb1 
select  1,1 union all
select  2,2 union all
select  3,3 union all
select  4,4 union all
select  5,5

if object_id('tb2')is not null
drop table tb2
go
create table tb2 (id int,value int)
insert into tb2 
select  1,1 union all
select  2,2 union all
select  3,3 union all
select  4,4

if object_id('tb3')is not null
drop table tb3
go
create table tb3 (id int,value int)
insert into tb3 
select  1,1 union all
select  2,2 union all
select  3,3
--直接查询
select a.id,sum(a.value) as value from tb1 a  join 
(select tb2.id,tb2.value from tb2 where not exists(select id,value from tb3 where tb2.id=tb3.id))b
on a.id=b.id group by a.id
/*
-----------
id  value
4     4
*/

--使用视图实现
create view view_select
as
select tb2.id,tb2.value from tb2 where not exists(select id,value from tb3 where tb2.id=tb3.id)
go


select a.id,sum(a.value)as value from tb1 a  join view_select b
on a.id=b.id group by a.id

/*
-----------
id  value
4     4
*/
我这儿测试是没问题的 你试试你那儿是不是连接关键字写的有问题
开启时代 2012-11-06
  • 打赏
  • 举报
回复
表示不可能

34,590

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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