Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 2008 使用联接、分组依据和_Sql Server 2008_Tsql_Sql Update_Aggregate Functions - Fatal编程技术网

Sql server 2008 使用联接、分组依据和

Sql server 2008 使用联接、分组依据和,sql-server-2008,tsql,sql-update,aggregate-functions,Sql Server 2008,Tsql,Sql Update,Aggregate Functions,select语句执行时没有错误或警告 update语句引发错误: 关键字“group”附近的语法不正确 select [sSVsys].[textUniqueWordCount], count(*) as [actCount] from [docSVsys] as [sSVsys]with (nolock) join [FTSindexWordOnce] with (nolock) on [sSVsys].[sID] = [FTSindexWordOnce].[sID] where [s

select语句执行时没有错误或警告

update语句引发错误: 关键字“group”附近的语法不正确

select [sSVsys].[textUniqueWordCount], count(*) as [actCount] 
from [docSVsys]  as [sSVsys]with (nolock)
join [FTSindexWordOnce] with (nolock)
  on [sSVsys].[sID] = [FTSindexWordOnce].[sID]
where [sSVsys].[sID] < 500000
group by [sSVsys].[sID], [sSVsys].[textUniqueWordCount] 
having [sSVsys].[textUniqueWordCount] <> count(*)

update [sSVsys]
set [sSVsys].[textUniqueWordCount] = count(*) 
from [docSVsys]  as [sSVsys]with (nolock)
join [FTSindexWordOnce] with (nolock)
  on [sSVsys].[sID] = [FTSindexWordOnce].[sID]
where [sSVsys].[sID] < 500000
group by [sSVsys].[sID], [sSVsys].[textUniqueWordCount] 
having [sSVsys].[textUniqueWordCount] <> count(*)
如果答案是连接到一个派生表,那么我可以找到答案。 现有更新是否存在语法错误

这个派生表有效

update [docSVsys] 
set [docSVsys].[textUniqueWordCount] = [WordOnce].[actCount]
from [docSVsys]
join 
(   select [FTSindexWordOnce].[sID], count(*) as [actCount]
    from   [FTSindexWordOnce] with (nolock)
    -- where  [FTSindexWordOnce].[sID] < 1500000
    group by [FTSindexWordOnce].[sID]  ) as [WordOnce]
 on [docSVsys].[sID] = [WordOnce].[sID]
and [docSVsys].[textUniqueWordCount] <> [WordOnce].[actCount]

我会把这件事保留几天,等待任何关于更好方法的评论或回答,然后删除。这种方法存在于现有的SO答案中

原始update语句包含GROUP BY和HAVING,这在update语句语法中是不允许的。下面是指向语法图的链接:

第二个版本将GROUP BY和HAVING作为派生表的一部分,这是允许的

是的,你确实有语法错误


顺便说一句,我同意@BlueFoots:用CTE代替派生表将使您的更新更易于阅读和理解。这是一件小事,但它在维护的方便性方面会有很大的不同

通常,我会使用带有聚合的子查询或CTE。BlueFoots不建议使用CTE而不是子查询,我看不出CTE如何在维护方面产生重大影响。但还是要谢谢你的回答+1.