【问题标题】:UPDATE table via join in SQL通过 SQL 中的连接更新表
【发布时间】:2014-07-23 18:43:09
【问题描述】:

我正在尝试规范化我的表以提高数据库的效率。

为此,我从一个表中删除了几列,我正在更新其中的几列。

这是所有列都在表中时的原始查询:

UPDATE myActDataBaselDataTable 
set [Correct Arrears 2]=(case when [Maturity Date]='' then 0 else datediff(d,convert(datetime,@DataDate, 102),convert(datetime,[Maturity Date],102)) end)
from myActDataBaselDataTable

现在我已经从表 myActDataBaselDataTable 中删除了 [Maturity Date],并且有必要从基础引用表 ACTData 中检索该列,该表称为 Mat

在我的表 myActDataBaselDataTable 中,帐号字段是 ACTData 中 3 个字段的串联,因此

myActDataBaselDataTable.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]

(其中 ac 是 ACTData 的别名)

因此,在查看了 SO 上其他地方给出的答案(例如 1604091: update-a-table-using-join-in-sql-server)后,我尝试修改此特定更新语句,如下所示,但我无法正确:

UPDATE myActDataBaselDataTable 
set dt.[Correct Arrears 2]=(
    case when ac.[Mat]='' 
        then 0 
        else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,ac.[Mat],102))
    end)
from ACTData ac 
inner join myActDataBaselDataTable  dt
    ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]    

我要么收到Incorrect syntax near 'From' 错误,要么收到The multi-part identifier "dt.Correct Arrears 2" could not be bound.

我将不胜感激有关如何正确处理此问题的任何指导,或有关如何做得更好的建议。

谢谢

编辑:

顺便说一句,当我将以下内容作为 SELECT 运行时,它会返回没有错误的数据:

select case when [ac].[Mat]='' 
            then 0 
                else datediff(d,convert(datetime,'2014-04-30', 102),convert(datetime,[ac].[Mat],102))
        end
        from ACTData ac 
    inner join myActDataBaselDataTable  dt
        ON dt.[Account No]=ac.[Unit] + ' ' + ac.[ACNo] + ' ' + ac.[Suffix]

【问题讨论】:

  • 尝试更新 dt 而不是更新 myActDataBaselDataTable
  • 谢谢(非常简单,但我完全没有发现!),也许您可​​以将其扩展为我可以选择帮助下一个找到它的人的答案?

标签: tsql sql-server-2008-r2 sql-update jointable


【解决方案1】:

在连接更新中,更新别名

update dt

令人困惑的是,在更高版本的 SQL 中,您不需要在更新行中使用别名

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    • 2018-11-17
    • 1970-01-01
    • 2017-12-30
    • 2021-03-16
    • 1970-01-01
    相关资源
    最近更新 更多