【问题标题】:SQL Server 2008 - update table A using results of join B with CSQL Server 2008 - 使用连接 B 和 C 的结果更新表 A
【发布时间】:2012-06-01 08:35:23
【问题描述】:

我在发布此问题之前尝试搜索,但找不到另一个示例。

我很痛苦地意识到 SQL 目前是我的致命弱点,并且正在努力解决它,所以请多多包涵!

我的悲惨故事涉及 3 张桌子:

tableA:有我想更新的列(estId)

tableB:包含建立详细信息,包括名称(estName)

tableC:包含要导入的机构数据,包括机构名称(estName)和关联的机构ID(estCode)

在伪语言中,我希望实现的是:

Update tableA
Set estId = tableC.estCode
Where tableC.estName = tableB.estName

我试过这个:

UPDATE tableA
SET estId = tableC.estCode
FROM
    tableC
    JOIN tableB
    ON tableC.estName = tableB.estName

那失败了。或者更确切地说,它更新了 estId 列,但每一行都包含 tableC 中的第一个值。

我可能遗漏了一些明显的东西......

谁能帮忙?

【问题讨论】:

  • 您需要在from 子句中将TableA 加入到其他表中。我没有从上面的信息中看到连接。所以,update TableA set estId = tableC.estCode from TableA inner join TableB on ... inner join TableC ...
  • 您需要一个条件来加入 tableA - 否则数据库引擎不知道如何更新列。 tableA 中还有哪些其他列对应于 tableB 或 tableC 中的列?
  • 开始:您当前的加入/更新在 tableA 上没有任何条件。您希望 tableB/tableC 中的行与 tableA 中要更新的行之间如何匹配?
  • 谢谢大家 - 我知道这将是相当明显的事情。在尝试上述方法之前,我尝试了一个 SELECT 查询以查看它是否返回了我想要的结果。这里的问题是我缺乏知识 - 我根本不知道如何使用 JOIN 正确构建 UPDATE
  • 澄清一下:问题解决了吗?

标签: sql-server-2008 sql-update


【解决方案1】:

更新 t_alias SET t_alias.estId = tableC.estCode 从 表 A 作为 t_alias 加入表B 表 B.estID = 表 A.estID 加入表C ON tableC.estName = tableB.estName

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-16
    • 2021-03-10
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    相关资源
    最近更新 更多