【问题标题】:Copy Row into another Table with an Update使用更新将行复制到另一个表中
【发布时间】:2011-08-08 08:49:28
【问题描述】:

好吧,标题可能有点难懂,但这是我想做的。

我有一个包含几列的表“A”。 我有一个包含完全相同列的表“B”。

在我的程序流程中,我将几行从“A”插入到“B”(一种临时缓存)。 “A”中的列数据可能会发生变化,但是当有人单击“恢复”按钮时,我想将这些行从“B”复制回“A”并覆盖那些与我想从“复制”具有相同 ID 的行B'。

例如

Table A:

1  :      Hi |
2  :      Friends |
3  :      What's up

在流程中我备份 id 1 和 2

Table B:

1  :      Hi |
2  :      Friends

现在我做了一些事情,表 A 发生了一些变化

Table A (changed):

1 :       Hi diddely doo |
2 :       Amigo's |
3 :       What's up 

现在我意识到我的更改是错误的,我想将表“B”中 id 为 1 和 2 的记录恢复为原始状态。

是否有一个“简单”的 sql 可以做到这一点,而不需要 1 接 1 获取这些 id 并逐 1 更新它?

提前致谢!

【问题讨论】:

  • 您是否也想过如果您的脚本在这两个中间死掉会发生什么?

标签: mysql sql database


【解决方案1】:

你可以使用JOIN in UPDATE statements:

UPDATE ta SET ta.text = tb.text
INNER JOIN tb ON ta.id = tb.id

或隐式连接:

UPDATE ta, tb SET ta.text = tb.text
WHERE ta.id = tb.id

您可以删除并重新插入,这样如果两个表具有相同的表方案,您就不必指定列:

DELETE FROM ta WHERE id IN (SELECT id FROM tb)

INSERT INTO ta
SELECT * FROM tb

【讨论】:

  • 嗯,我知道那个,但是当有很多列时,你有相当多的 sql 查询......我只是想知道如果两个表都有完全相同的列,是否有“快捷方式”
  • 您的问题只有一列,并且您说您不想获取“那些 id 的 1 by 1 并 1 by 1 更新它”,所以我假设您在表 b 中选择 ID 的位置和分别更新它们。
  • 好吧,我只是以一列为例,实际上我想用很多列来做。
  • 更新了我的答案,但您应该更新您的问题以反映您的意图。
  • 老兄,你最后一次编辑成功了。为什么我没有想到呢?谢谢
猜你喜欢
  • 2022-11-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
  • 1970-01-01
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多