在 MySQL 中用另一个表查找和替换表数据

Posted

技术标签:

【中文标题】在 MySQL 中用另一个表查找和替换表数据【英文标题】:Find and replace table data with another table in MySQL 【发布时间】:2014-02-19 12:59:11 【问题描述】:

在我的 mysql 数据库中,我有两个表,itemusers。在项目表中,我有两列名为created_bycreated_by_alias。 created by alias 列完全填充了名称,但created_by 列为空。我的下一张表是users 表。这里面有idname 列。

我想知道是否可以使用MySQL将item表中的created_by_aliasusers表中的name列进行匹配,然后取用户的id放入created_by 专栏。

我在想某种JOIN 函数。任何想法将不胜感激。

【问题讨论】:

加入是正确的路径 - 假设您可以通过唯一的 id 加入两个表,只需执行更新。您可以使用set items.created_by_alias = users.name,它会根据连接更新为任何匹配的名称值。 (免责声明:我对 SQL 服务器有经验,而不是 MySQL) @tjennings 太好了,我会备份数据库并尝试一下,谢谢! 【参考方案1】:

这应该可行:

UPDATE items
SET created_by = (SELECT u.id 
                  FROM users u
                  WHERE u.name = items.created_by_alias)

【讨论】:

【参考方案2】:

实际上,您确实是在正确的方向 - MySQL 有一个update join 语法:

UPDATE items
JOIN   users ON users.name = items.created_by_alias
SET    created_by = items.id

【讨论】:

【参考方案3】:

试试这个:

UPDATE item i 
INNER JOIN users u ON i.created_by_alias = u.name
SET i.created_by = u.id;

【讨论】:

【参考方案4】:

以下应该在 MySQL 中工作

UPDATE item 
       INNER JOIN users 
               ON item.created_by_alias = users.name 
SET    item.created_by = users.id 

当然,您还应该检查所有用户名是否唯一...

【讨论】:

以上是关于在 MySQL 中用另一个表查找和替换表数据的主要内容,如果未能解决你的问题,请参考以下文章

mysql更新一个表不在另一个表中的数据

是否有一个 Excel 函数或脚本来查找和替换两个不同工作表中匹配的字段,并将其替换为第二个工作表中包含的另一个数据?

使用 MySQL 查询查找和替换整个表中的文本

使用 MySQL 查询查找和替换整个表中的文本

使用 MySQL 查询查找和替换整个表中的文本

在MYSQL中如何用一个字段的值替换另一个字段的值