SQL优化

__lhy 2015-03-16 04:13:05
select StyleNo,[TopClass]=(select top 1 [TopClass] from RealGoods r where r.GoodsSn=g.GoodsSn)...
from GoodsAmount g group by StyleNo

怎么优化[TopClass]=(select top 1 [TopClass] from RealGoods r where r.GoodsSn=g.GoodsSn),还有其他字段也是采用子查询来完成,比较耗时
...全文
257 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
__lhy 2015-08-13
  • 打赏
  • 举报
回复
改为建表来查询,虽然比较笨拙。
發糞塗牆 2015-03-17
  • 打赏
  • 举报
回复
现在什么情况,耗时是什么定义?贴一下执行计划看看
还在加载中灬 2015-03-17
  • 打赏
  • 举报
回复
select g.StyleNo,T.[TopClass]--后面可以添加T的其他列,T.COL1,T.COL2--SQL2005+才有效
    --,[TopClass]=(select top 1 [TopClass] from RealGoods r where r.GoodsSn=g.GoodsSn)...
from GoodsAmount g
    CROSS APPLY(SELECT TOP 1 * FROM RealGoods r where r.GoodsSn=g.GoodsSn)T
group by  g.StyleNo,T.[TopClass]
没注意,那就加到GROUP BY 里面去 如果GoodsAmount表内的StyleNo不重复的话,后面的GROUP BY就整句不要
__lhy 2015-03-17
  • 打赏
  • 举报
回复
引用 1 楼 ky_min 的回复:
select g.StyleNo,T.[TopClass]--后面可以添加T的其他列,T.COL1,T.COL2--SQL2005+才有效
	--,[TopClass]=(select top 1 [TopClass] from RealGoods r where r.GoodsSn=g.GoodsSn)...
from GoodsAmount g
	CROSS APPLY(SELECT TOP 1 * FROM RealGoods r where r.GoodsSn=g.GoodsSn)T
group by  g.StyleNo
消息 8120,级别 16,状态 1,第 1 行 选择列表中的列 'T.TopClass' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
oraclecaicai 2015-03-16
  • 打赏
  • 举报
回复
我怎么觉得这个语句有问题啊,GoodsAmount表按照StyleNo列分组后,应该没法在子查询中通过GoodsSn字段和RealGoods表做连接了吧?有原表数据么?
还在加载中灬 2015-03-16
  • 打赏
  • 举报
回复
select g.StyleNo,T.[TopClass]--后面可以添加T的其他列,T.COL1,T.COL2--SQL2005+才有效
	--,[TopClass]=(select top 1 [TopClass] from RealGoods r where r.GoodsSn=g.GoodsSn)...
from GoodsAmount g
	CROSS APPLY(SELECT TOP 1 * FROM RealGoods r where r.GoodsSn=g.GoodsSn)T
group by  g.StyleNo

27,579

社区成员

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

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