2

我有这样的桌子,

当前表1

id | car_name | model | year
---+----------+-------+----- 
1  |a         | abc   | 2000
2  |b         | xyx   | 2001
3  |null      | asd   | 2003
4  |c         | qwe   | 2004
5  |null      | xds   | 2005
6  |d         | asd   | 2006

如您所见,我有一些空值,我想用前一行值替换它们。

所以应该变成这样

所需表1

id | car_name | model | year
---+----------+-------+----- 
1  |a         | abc   | 2000
2  |b         | xyx   | 2001
3  |b         | asd   | 2003
4  |c         | qwe   | 2004
5  |c         | xds   | 2005
6  |d         | asd   | 2006  

我用谷歌搜索,但没有找到任何解决方案。

任何建议总是受欢迎的。

提前致谢。

4

3 回答 3

3

即使一行中有几条记录,此查询也应该有效NULL

询问:

SQLFIDDLE示例

UPDATE Table1
SET car_name = (SELECT t1.car_name
                FROM (SELECT * FROM Table1) t1
                WHERE t1.id < Table1.id
                AND t1.car_name is not null
                ORDER BY t1.id DESC
                LIMIT 1)
WHERE car_name is null

结果:

| ID | CAR_NAME | MODEL | YEAR |
--------------------------------
|  1 |        a |   abc | 2000 |
|  2 |        b |   xyx | 2001 |
|  3 |        b |   asd | 2003 |
|  4 |        c |   qwe | 2004 |
|  5 |        c |   xds | 2005 |
|  6 |        d |   asd | 2006 |
于 2013-04-05T15:06:08.757 回答
2

尝试这样的事情:

UPDATE Table1 as first
INNER JOIN Table1 as second
    ON second.id = first.id-1
SET first.car_name = second.car_name
WHERE first.car_name IS NULL
于 2013-04-05T14:36:00.863 回答
1

通过脚本/程序甚至存储过程来完成它可能会更好,而不是使用 sql 简单地执行它,因为您可以获得处理一些极端情况的额外好处(比如当有两个连续的行时会发生什么空等)而且因为我认为它是一次性的工作。

于 2013-04-05T14:43:24.553 回答