我有这样的表,
当前表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
我用谷歌搜索,但没有找到任何解决方案。
随时欢迎任何建议。
提前致谢。
答案 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等)因为我认为它是一次性工作。