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

ご覧のとおり、いくつかの null 値があるため、それらを前の行の値に置き換えたいと考えています。

だからこうなるはず

希望のテーブル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 に答える
1

いくつかのコーナーケースを処理することで追加の利点が得られるため、SQLを単純に使用するよりも、スクリプト/プログラムまたはストアドプロシージャを介して実行する方がよい場合があります(ヌルなどの2つの連続した行がある場合など)。また、私はそれが1回限りの仕事であると想定しているためです。

于 2013-04-05T14:43:24.553 に答える