【问题标题】:MySQL: How to update fields with the values of the record before this oneMySQL:如何使用此之前记录的值更新字段
【发布时间】:2015-02-16 15:14:42
【问题描述】:

我有一个包含 100 万条记录的大表。我从另一家公司得到这张桌子。所有记录都有一个自动编号 ID 作为 PRIMARY KEY。很多字段是空的,因为一些记录“属于一起”(作为一个组),而这些字段只填写第一条记录(某种标题记录)。

我想在所有后续记录中填写相同的值,直到该字段不为空(即新记录组中的新“标题”开始的地方)。 (我知道,糟糕的数据库设计,但这是我得到的,我想在它进入后立即将其转变为更好的数据库设计,这只是实现更长步骤过程的第一步。)

我很难做到这一点。我想按 id 的顺序更新表,如果特定字段为空,则用上一条记录的值填充它们。

我尝试了不同的解决方案,但结果都不起作用。

我的最后一个:

UPDATE t1
SET f1 =
        (SELECT t2.f1 FROM t1 AS t2  
                WHERE t2.id = t1.id-1) , 
    Verzend_tijd=
        (SELECT t3.f2 FROM t1 as t3 
                WHERE t3.id = t1.id-1)  
WHERE  t2.f1 = '' 
ORDER BY t1.id

我得到错误:

You can't specify target table 't1' for update in FROM clause

有人知道如何完成这项工作吗?我也尝试过使用 INNER JOIN,但结果是我无法在 UPDATE+INNER JOIN 中执行 ORDER BY,而且顺序很重要!

我有点不知所措,谷歌搜索也没有给我带来任何东西。

【问题讨论】:

  • 如果您为另一个添加=(SELECT f1 FROM(your query here) as x),....same,您的查询将起作用
  • 感谢您的帮助。我试过UPDATE t1 SET f1 = (SELECT f1 FROM (SELECT t2.f1 FROM t1 AS t2 WHERE t2.id = t1.id-1) AS x), [... ] ORDER BY t1.id,但这在'where子句'中给出了'Unknown column't1.id'

标签: mysql


【解决方案1】:

经过越来越多的谷歌搜索,我在这个网站上找到了答案:

Mysql Updating a record with a value from the previous record

很抱歉给您带来不便

【讨论】:

    猜你喜欢
    • 2017-03-06
    • 2018-05-28
    • 1970-01-01
    • 1970-01-01
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多