【发布时间】: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