仅当自动增量数据相等时才从另一个表列更新 mysql 列

Posted

技术标签:

【中文标题】仅当自动增量数据相等时才从另一个表列更新 mysql 列【英文标题】:Update MySQL column from another table column only if the autoincrement data is equal 【发布时间】:2016-05-15 02:49:59 【问题描述】:

我有一个包含 2 个表的数据库。在table1中有两列:

columnA(自动增量)和columnB(文本)

在表 2 中: columnC(autoincrement) 和 columnD(text)

仅当自动增量列相等时,我想用 columnD 中的数据替换(复制)columnB 中的数据。

我试过这个,但它不正确:

UPDATE table1 
   SET columnB = (
      SELECT columnD 
      FROM table2 WHERE (
         SELECT columnA FROM table1 = SELECT columnC FROM table2)

提前感谢您的帮助! :)

【问题讨论】:

【参考方案1】:

您可以通过带有 INNER JOIN 的 UPDATE 来更新它:

UPDATE `table1` as a
INNER join table2 b on a.columnA = b.columnC
SET a.`columnB` = b.`columnD`
-- WHERE clause if needed ...

见: SQL Server - inner join when updating

【讨论】:

我已经更新了 mysql 的代码。你能再试一次吗? 我错过了别名 ab。这是更新:pastie.org/10709664。上面的那些表和列确实存在于您的数据库中吗?【参考方案2】:

您可以使用左连接: UPDATE table1 t1 left join table2 t2 on t1.columnA=t2.columnC set t1.columnB=t2.columnD where t2.columnc is not null

【讨论】:

这是一种编写内部连接的冗长方法【参考方案3】:

您正在尝试使用一个查询来更新 columnB,这意味着无论 columnA 和 columnC 是否相等。我建议创建一个过程,在那里实现 if 语句,然后简单地调用该过程。

【讨论】:

以上是关于仅当自动增量数据相等时才从另一个表列更新 mysql 列的主要内容,如果未能解决你的问题,请参考以下文章

Firestore:仅当有更新时才从服务器获取数据,否则从缓存中获取

仅当两个表中都存在员工时才从临时表中更新员工 ID

仅当字段为空时才更新来自 select 语句的查询

sql Oracle:仅当值存在时才从另一个表中插入值

仅当锚标记包含 img 时才从图像中删除链接下划线

仅当查询不为空时,才从查询写入 BigQuery 中的表