【问题标题】:Find and replace table data with another table in MySQL在 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 太好了,我会备份数据库并尝试一下,谢谢!

标签: mysql sql join sql-update inner-join


【解决方案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 
        

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2011-12-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-04
          • 2011-10-16
          相关资源
          最近更新 更多