全连接变成了左连接???

seascape 2003-05-07 03:07:54
有表a :日期,类别,消费额
b: 日期,类别,增加值
我写: select a.日期,a.类别,sum(消费额),sum(增加值)
from a full join b on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by a.日期,a.类别
我看执行计划,是执行的 a left outer join b,查询结果少


而我写: select a.日期,a.类别,sum(消费额),sum(增加值)
from (select * from a where 日期=20030501) a
full join b on a.日期=b.日期 and a.类别=b.类别

group by a.日期,a.类别
才是我要的结果,执行计划也是 full join,请高手解释一下为何?


...全文
71 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
seascape 2003-05-07
  • 打赏
  • 举报
回复
楼上:不太明白你的话
nboys 2003-05-07
  • 打赏
  • 举报
回复
第一条是对一个表来进行排除,在左join到第二个表,而第二条是两个表来一起进行排除,再join,问题出现在使用了full join 或left join
nboys 2003-05-07
  • 打赏
  • 举报
回复

select a.日期,a.类别,sum(isnull(消费额,0)),sum(isnull(增加值,0))
from a left join b on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by a.日期,a.类别

select b.日期,b.类别,sum(isnull(消费额,0)),sum(isnull(增加值,0))
from b full join a on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by b.日期,b.类别

select b.日期,b.类别,sum(isnull(消费额,0)),sum(isnull(增加值,0))
from b full outer join a on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by b.日期,b.类别

seascape 2003-05-07
  • 打赏
  • 举报
回复
蚂蚁也是对的,解释一下好吗?
seascape 2003-05-07
  • 打赏
  • 举报
回复
登山:你的也是对的 ,可以解释解释吗?
seascape 2003-05-07
  • 打赏
  • 举报
回复
楼上:可以了
但你能否解释一下我的问题呢〉
select a.日期,a.类别,sum(消费额),sum(增加值)
from a full join b on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by a.日期,a.类别
我看执行计划,是执行的 a left outer join b,查询结果少,为什么?
和where a.日期=20030501有关系吧
愉快的登山者 2003-05-07
  • 打赏
  • 举报
回复
select a.日期,a.类别,sum(消费额),sum(增加值)
from a full join b on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501 or b.日期 = 20030501
group by a.日期,a.类别
CrazyFor 2003-05-07
  • 打赏
  • 举报
回复
TRY:
select a.日期,a.类别,sum(isnull(消费额,0)),sum(isnull(增加值,0))
from a left join b on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by a.日期,a.类别
union
select b.日期,b.类别,sum(isnull(消费额,0)),sum(isnull(增加值,0))
from b full join a on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by b.日期,b.类别
seascape 2003-05-07
  • 打赏
  • 举报
回复
我觉得好象是where a.日期=20030501的问题
seascape 2003-05-07
  • 打赏
  • 举报
回复
楼上:结果还是a left outer join b,查询结果少
CrazyFor 2003-05-07
  • 打赏
  • 举报
回复
TRY:
select isnull(a.日期,b.日期),isnull(a.类别,b.类别),sum(消费额),sum(增加值)
from a full join b on a.日期=b.日期 and a.类别=b.类别
where a.日期=20030501
group by a.日期,a.类别,b.日期,b.类别,

34,590

社区成员

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

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