【问题标题】:SQL... How to update rows with data from other rows in the same table?SQL ...如何使用同一表中其他行的数据更新行?
【发布时间】:2011-02-10 21:42:30
【问题描述】:

我正在使用 MySQL 服务器,并且我有一个表,其中一些行缺少数据。我想使用其他行的信息更新行。我的桌子看起来像:

id,登录,deviceId,deviceModel 1,2010-10-12,9ABC9, 2,2010-10-12,3E44F, 3,2010-10-13,D3453, 4,2010-10-14,D3453, 5,2010-10-14,D3453,HW1 6,2010-10-12,3E44F,HW2 7,2010-10-12,9ABC9,HW1

对于前几个条目,deviceModel 字段为空。我想使用在同一个表的其他行中为 deviceId 找到的 deviceModel 更新此值。在上面的例子中,第 1 行应该有 deviceModel = HW1,第 2 行应该有 deviceModel = HW2,等等。

谢谢!

【问题讨论】:

    标签: sql mysql


    【解决方案1】:

    首先,这是一个非规范化的设计。您应该将 deviceModel -> deviceId 关系移动到另一个表。

    第二:

    UPDATE
      yourTable AS t1
    CROSS JOIN (
      SELECT DISTINCT 
        deviceId, deviceModel 
      FROM 
        yourTable 
      WHERE 
        deviceModel IS NOT NULL
    ) AS t2
    USING (deviceId)
    SET
      t1.deviceModel = t2.deviceModel
    WHERE
      t1.deviceModel IS NULL
    

    【讨论】:

    • 你说得对,这就是我应该建表的方式。让我看看我能不能把它拆开,试试这个方法。
    【解决方案2】:

    Self Join-

    UPDATE MyTable m1, MyTable m2 
    SET m1.deviceModel= m2.deviceModel
    WHERE m1.deviceid=m2.deviceid and m2.deviceModel is not null
    

    【讨论】:

    • 无效的 SQL。更新中没有 FROM
    • 我的 MySQL 不这么认为:SQL synax error near 'from。更不用说文档了:dev.mysql.com/doc/refman/5.5/en/update.html 你的第二个查询似乎很好。
    • 我的错误..没有看到它是 MySQL 更新它感谢您的更正。
    • 没问题。顺便说一句,UPDATE BTW 中有哪种 SQL 风格?
    • 谢谢...现在我只需要弄清楚为什么我的连接超时了。我得到“查询执行被中断”。只有 13000 行,只有大约 25% 需要更新。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2012-09-02
    相关资源
    最近更新 更多