【问题标题】:Update SQL with Aliased tables still returns "table is ambiguous" error使用别名表更新 SQL 仍然返回“表不明确”错误
【发布时间】:2015-12-14 15:55:22
【问题描述】:

我正在尝试运行以下更新,但遇到“表不明确”错误。

UPDATE dbo.cg
SET cg.column = gId.ID
FROM    dbo.a
        INNER JOIN dbo.cg as cId ON cId.[a] = dbo.a.[c]
        INNER JOIN dbo.cg as gId ON gId.[a] = dbo.a.[b];

表 dbo.a 包含用于根据与同一表的关系针对不同列中的值更新 cg 中的值的数据。它是一个自引用的层次结构。

如您所见,所有内容都是别名,所以我有点困惑为什么它不会运行。

非常感谢您提供的任何帮助。

【问题讨论】:

  • SET cg.column = ....,您的查询中有 2 个 cg 表,这就是您收到该消息的原因
  • 即使我给另外两个起了别名?我已经查看了您如何建议我为 SET 设置别名,甚至比我这样做的更远。

标签: sql sql-update table-alias


【解决方案1】:

在 SQL Server 中,您应该使用update 中的别名,而不是表。此外,您没有名为cg 的别名。所以是这样的:

UPDATE cId
SET column = gId.ID
FROM dbo.a a INNER JOIN
     dbo.cg cId
     ON cId.[a] = a.[c] INNER JOIN
     dbo.cg gId
     ON gId.[a] = a.[b];

【讨论】:

  • 非常感谢戈登的回复。我已经尝试过,我必须说要解决这个问题,但我很欣赏快速响应。
【解决方案2】:

不用担心,运气好就解决了。

我在绝望中将桌子与自己连接起来......

UPDATE dbo.cg
SET cg.column = gId.ID
FROM    dbo.a
        INNER JOIN dbo.cg as cId ON cId.[a] = dbo.a.[c]
        INNER JOIN dbo.cg as gId ON gId.[a] = dbo.a.[b]
        INNER JOIN cg ON cId.[a] = cg.[a];

如果有人能解释为什么会这样,我会非常感谢理解 MS SQL 的逻辑。

【讨论】:

  • 我今天偶然发现了同样的问题,加入自身使错误消失并且更新有效。真的很奇怪国际海事组织
猜你喜欢
  • 1970-01-01
  • 2012-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-13
  • 1970-01-01
相关资源
最近更新 更多