MSSQL执行UPDATE关联查询时出现别名与INNER JOIN错误如何解决
MSSQL UPDATE多表关联语法错误原因及解决方案
错误根因
你使用的是MySQL的UPDATE JOIN语法,不符合SQL Server(MSSQL)的语法规范:
- MSSQL不支持直接在
UPDATE关键字后直接跟表+别名+JOIN的结构 - 别名声明、JOIN逻辑都需要放到
UPDATE语句后续的FROM子句中,才会被MSSQL正确解析
修正后的正确语句
UPDATE c SET c.AmountDonated = t.total FROM Campaign c INNER JOIN ( SELECT CampaignID, SUM(Amount) AS total FROM Donation GROUP BY CampaignID ) t ON c.CampaignID = t.CampaignID
可选扩展说明
如果需要覆盖所有Campaign记录,哪怕没有对应捐赠记录的也要将AmountDonated置为0,可以调整为左连接+空值处理:
UPDATE c SET c.AmountDonated = ISNULL(t.total, 0) FROM Campaign c LEFT JOIN ( SELECT CampaignID, SUM(Amount) AS total FROM Donation GROUP BY CampaignID ) t ON c.CampaignID = t.CampaignID
内容的提问来源于stack exchange,提问作者Davea
相关产品推荐
相关产品推荐

