【问题标题】:SQL update from one Table to another where ID matchesSQL 从一个表更新到 ID 匹配的另一个表
【发布时间】:2020-09-21 18:11:10
【问题描述】:

我有 2 个数据库 Alpha 和 Beta。每个数据库都有相同的表“评论”。 Comments 表有 2 个字段:ID 和 Comments。 Alpha.Comments 仅填充了 ID 字段,对应的 Comment 字段为空。 Beta.Comments 既有 ID 又有对应的 cmets。是否有 SQL Query 可以使用 Beta 中的相应条目更新所有 Alpha.Comments 字段,其中 ID 匹配?

【问题讨论】:

  • SQL Server 2012, using MSSMS Ran this quiery: update alpha.cmets set cmets = (select b.cmets from beta.cmets b where b.id = cmets.id);它出错了:消息 512,级别 16,状态 1,第 1 行子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。声明已终止。
  • 已解决。显然表 B 的记录比表 A 多。必须正确使用 Where 语句过滤掉同一组记录以匹配表 A。
  • 也许您会关心 answer your own question 并准确解释您是如何解决问题的,以防其他人可能会因为遇到相同的错误并寻找答案而提出这个问题。

标签: sql sql-server


【解决方案1】:

已经有类似这个请求的帖子了-请看一下:

Copy data from one column to other column (which is in a different table)

MySQL: Copy table to another table with an extra column

Join results from tables with same name from different databases

我确定还有其他的,所以你可以找到一个与你正在使用的数据库相关的。

【讨论】:

  • 你为什么不投票结束这个重复的问题?
  • 会做 - 错过了那个选项
【解决方案2】:

类似:

update alpha.comments
    set comments = (select b.comments from beta.comments b where b.id = comments.id);

在 SQL Server 中,您可以将其表示为:

update a
    set comments = b.comments
    from alpha.comments a join
         beta.comments b
         on a.id = b.id;

这以一种不幸的方式处理重复。它任意选择一个赋值,所以不会产生错误。

【讨论】:

  • 我认为您误解了这个问题。有两个表都命名为Comments。没有beta 表。
  • @Abra 。 . .我调整了答案。第二个表称为beta.comments 而不是beta 是答案的一个小细节。
  • 报错:Msg 512, Level 16, State 1, Line 1 子查询返回超过 1 个值。当子查询跟随 =、!=、、>= 或子查询用作表达式时,这是不允许的。声明已终止。
  • @matrixman001 。 . .如果您在第二个表中重复了 id,那么您的问题没有得到很好的定义。你应该解释你想如何处理它。您的问题中没有任何内容表明您在任一表中都重复了 ID。
猜你喜欢
  • 2010-09-18
  • 2017-03-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-27
  • 2020-06-23
相关资源
最近更新 更多