查询从表中替换空值

时间:2013-04-05 14:27:44

标签: mysql sql

我有这样的表,

当前表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  
我用谷歌搜索,但没有找到任何解决方案。

随时欢迎任何建议。

提前致谢。

3 个答案:

答案 0 :(得分:3)

即使在NULL

的行中有多条记录,此查询也应该有效

查询:

<强> SQLFIDDLEExample

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 |

答案 1 :(得分: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

答案 2 :(得分:1)

最好通过脚本/程序甚至是存储过程来实现它,而不是明白地使用sql,因为你可以获得处理一些极端情况的额外好处(比如当有两个连续的行时会发生什么null等)因为我认为它是一次性工作。