【问题标题】:Query to replace null values from the table查询以替换表中的空值
【发布时间】:2013-04-05 14:27:43
【问题描述】:

我有这样的桌子,

当前表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  

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

欢迎提出任何建议。

提前致谢。

【问题讨论】:

  • 你为什么要这样做?
  • 您使用的是什么 DBMS?上一行是 id = current row.id-1 的行吗?

标签: mysql sql


【解决方案1】:

即使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 |

【讨论】:

    【解决方案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
    

    【讨论】:

      【解决方案3】:

      最好通过脚本/程序甚至存储过程来完成,而不是直接使用 sql 来完成,因为处理一些极端情况会带来额外的好处(比如当有两个连续的行null 等),而且我认为它是一次性工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-04-09
        • 1970-01-01
        • 2021-07-13
        • 1970-01-01
        • 2021-06-08
        • 2021-09-01
        • 1970-01-01
        • 2021-02-14
        相关资源
        最近更新 更多