【问题标题】:Creating a complicated MySQL Update Query创建一个复杂的 MySQL 更新查询
【发布时间】:2015-06-17 23:57:31
【问题描述】:

我正在尝试创建一个UPDATE 查询,它将用另一个名为Names 的表中的用户id 字段值替换名为TimeStamps 的表上的NameID 字段。这是一些示例数据。

名称表

id:1
name:John
password:1234

时间戳表

id:1
name:**John**
timestamp:01/01/2000 12:00:00

我想将TimeStamps 表中的Name 字段替换为Names 表中对应的id 值。我不完全确定如何编写查询,但我知道它以这样的开头。

UPDATE TimeStamps
    SET NameID=(NamesTableReference)
    WHERE NameID=(TimeStampsTableReference);

这样我就可以开始对用户的id 而不是用户的Name 运行查询。我们有多个同名用户,它没有提取正确的数据,因为它正在拉动多个用户。我可以手动更新数据,但表中有几十万行,这将花费太多时间。谁能阐明我需要在下面的查询中添加/更改的内容?谢谢!

【问题讨论】:

    标签: mysql sql-update


    【解决方案1】:

    我想你只是想要一个join:

    update timestamps t join
           names n
           on t.id = n.id
        set t.name = n.name;
    

    但是,update 不是必需的。您有一个 id 连接这两个表。只需在您使用timestamps 时使用它。也就是说,使用 join 来查找 name 而不是将其存储在两个位置 - 并且冒着与 id 关联的名称最终在两个表中不同的风险。

    【讨论】:

    • 我尝试运行下面的查询,我认为它有效。查看查询,您认为查询应该完成我想要做的事情吗?在执行查询之前,我对数据库进行了备份。更新TimeStamps t, Names n SET t.NameID=n.id WHERE t.NameID=n.Name
    • @CharlesVincent 。 . .在我看来,ID 和名称混淆了,但如果没有示例数据和期望的结果,就很难说。
    【解决方案2】:

    看起来这个查询成功了。

    UPDATE TimeStamps t, Names n
    SET t.NameID = n.id
    WHERE t.NameID = n.Name
    

    感谢大家的意见和帮助!希望这可以在将来对其他人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-07
      • 1970-01-01
      • 2015-01-28
      • 2011-09-21
      • 2016-07-29
      • 2012-07-08
      • 1970-01-01
      • 2014-12-25
      相关资源
      最近更新 更多