MYSQL-从另一张表中更新多行

3

我有两个表。一个是昨天的(30万行),另一个是今天的,行数相同但某些列的数据发生了变化。

这两个表大约有120列。

我应该如何仅更新更改的数据?
我已经尝试使用删除:

   delete from tableA
   where id in (select id from tableB)

但是它太慢了。
还尝试过

   update tableA inner join tableB
   on tableA.id=TableB.id

并且它没有起作用。

在此输入图片描述


你尝试使用 tableA 内连接 tableB on tableA.id=TableB.id 时出了什么问题? - ôkio
我试图查找内部并进行更新 - 但没有成功。收到了错误1064 - 语法有误。 - Katy
那么你必须列出要更新的列,就像Code-Monk的回答中所示。 - ôkio
2个回答

18

你需要在更新查询中设置值以获取更改。

例如:

update tableA inner join tableB on tableA.id=TableB.id
set tableA.col1=TableB.col1,
    tableA.col2=TableB.col2,
    tableA.col3=TableB.col3;

并且你可以在where子句中添加更多条件,以便查询在过滤记录上运行。


我在两个表中共有大约120列。有没有一种方法可以将它们一次性处理? - Katy
是的,但您只设置了要更改的那些列。如果您想更新所有列的值,可以尝试其他工具,如“Excel”来准备查询。 - Abhishek Ginani
如果您遇到像“错误代码:1175。您正在使用安全更新模式,并尝试更新一个没有使用关键列的WHERE子句的表。要禁用安全模式,请在首选项-> SQL编辑器中切换选项并重新连接。”这样的错误,您可以添加SET SQL_SAFE_UPDATES=0;更多信息... - Gubberrr

0

从tableA中删除id在tableB中的数据

可以尝试以下替代查询语句:

Delete tableA from tableA left Join tableB ON  tableA.id = tableB.id where tableB.id IS NOT NULL;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接