gpt4 book ai didi

sql-server-2008 - 使用 Join、Group By 和 Having 进行更新

转载 作者:行者123 更新时间:2023-12-02 22:08:56 27 4
gpt4 key购买 nike

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

更新语句抛出错误:
关键字“组”附近的语法不正确。

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 答案中。

最佳答案

您的原始更新语句具有 GROUP BY 和 HAVING,这在 UPDATE 语句语法中是不允许的。这是语法图的链接:UPDATE (Transact-SQL) .

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

所以,是的:你确实有语法错误。

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

关于sql-server-2008 - 使用 Join、Group By 和 Having 进行更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15688435/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com