在 MySQL 中用另一个表查找和替换表数据
Posted
技术标签:
【中文标题】在 MySQL 中用另一个表查找和替换表数据【英文标题】:Find and replace table data with another table in MySQL 【发布时间】:2014-02-19 12:59:11 【问题描述】:在我的 mysql 数据库中,我有两个表,item
和 users
。在项目表中,我有两列名为created_by
和created_by_alias
。 created by alias 列完全填充了名称,但created_by
列为空。我的下一张表是users
表。这里面有id
和name
列。
我想知道是否可以使用MySQL将item表中的created_by_alias
与users
表中的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 中用另一个表查找和替换表数据的主要内容,如果未能解决你的问题,请参考以下文章