-1

私は2つのテーブルを持っています。最初のものは

Tree2009

そして2つ目は

Tree2012

. 両方のテーブルに一致する一意の識別子が 1 つもありません。代わりに、私が使用する一意の識別子は、y_coord と x_coord の 2 つの列の組み合わせです。ただし、両方のテーブルに同じ列があります。tree2012 テーブルは table2009 の更新バージョンにすぎませんが、table2012 には多くの欠損値があります。

私の仕事は、tree2012.inspect_dt (列名は inspect_dt) の null 値を、tree2009.inspect_dt の値に置き換えることです。

if inspect_dt is null
    update tree2012
    set inspect_dt = (SELECT inspect_dt from tree2009 where tree2009.x_coord = tree2012.x_coord and tree2009.y_coord = tree2012.y_coord)

これまでのところ私はそれを持っています。if/else ステートメント、またはケースが必要だと思います。完成させる方法がわかりません。あまり複雑でない列を置き換えるために、そのようなものを使用しました。しかし、それが私が両方の座標セットを使用して一意の識別子として使用する方法です。

どんな助けでも大歓迎です。

4

1 に答える 1

0

事前に inspect_dt を取得する必要なく、1 つのステートメントで実行できます。

UPDATE tree2012
SET inspect_dt = 
    (   SELECT inspect_dt  
        FROM tree2009 
        WHERE tree2009.x_coord = tree2012.x_coord 
        AND tree2009.y_coord = tree2012.y_coord
            AND tree2009.inspect_dt IS NOT NULL
    )
WHERE inspect_dt IS NULL;

このsqlFiddleでチェックして、実行されていることを確認できます。

inspect_dt がnullでないレコードで何かをしたい場合は、ケースを使用できます。そうしないと、ポイントがわかりません。

于 2013-07-30T18:20:07.953 に答える