2012-01-30 17 views
3

基本的に私は以下の表と同様の形式の表を持っています。他の既存の行に基づいて列を更新するSQL UPDATEステートメント

私は何をしたい、このロジックに基づいて更新COL4ある

  • Col2にはnullの場合、COL3とCOL4を更新
  • col2が、値が一致するのCol1の値を見つけるnullでない場合Col2。それは、このテーブルの任意の方向を大幅に理解されるであろう
    | Col1 | Col2 | Col3 | Col4 | 
    ----------------------------- 
    | 1 | 2 | A1 | A2 | 
    ----------------------------- 
    | 2 | 3 | A2 | A3 | 
    ----------------------------- 
    | 3 |{null}| A3 | A3 | 
    

    ことが

    | Col1 | Col2 | Col3 | Col4 | 
    ----------------------------- 
    | 1 | 2 | A1 | 2 | 
    ----------------------------- 
    | 2 | 3 | A2 | 3 | 
    ----------------------------- 
    | 3 |{null}| A3 |{null}| 
    

    更新:この表を与え例えば

COL3 に対応する値を持つとCOL4を更新!

+2

どのDB?これまでに何を試しましたか?あなたはCASE声明を見ましたか? – Simon

+0

私はMySQL 5.1を使用しています。私はすでにSQL Serverのアップデートセットと同様のロジックを試してみましたが、役に立たないものです。私は最終的にケースステートメントを実装しますが、私が持っている問題は、それがヌルでないときにロジックを実行していることです – mattchong

+0

すでに試したコードとそれが与えたエラーを投稿できますか? – FrustratedWithFormsDesigner

答えて

1

このような何かが(未テスト)動作するはずです:

UPDATE table 
SET  col4 = CASE WHEN table.col2 IS NULL THEN table.col3 ELSE col2Matches.col3 END 
FROM table 
     INNER JOIN table AS col2Matches 
      ON table.col2 = col2Matches.col1 

このあなたがそれをテストしてみましょう必要があります。

SELECT CASE WHEN table.col2 IS NULL THEN table.col3 ELSE col2Matches.col3 END 
FROM table 
     INNER JOIN table AS col2Matches 
      ON table.col2 = col2Matches.col1 

希望これは、

を助けピート

+0

Col2がnullの場合、左外部結合にします。 –

+0

CASE WHENの最初の部分は、Col2がNULLであることを処理します。私はOPがnullではないことを懸念しているので、INNERとしました。 – pete

+0

フィリップが正しいです。私はそれを内部結合にするならば、私は第3行を失う。 – mattchong

0

このような何かOracleではおそらく動作します。

update myTable 
set col4 = case when col2 is null then col3 
       else (select col3 from myTable where col1 = col2) 
      end; 

もちろん、select col3 from myTable where col1 = col2が複数の行を返した場合、このクエリは機能しません。しかし、あなたのデータがこれを動作させるのに十分なほどクリーンであるかどうかはすでに分かっていると思います。

関連する問題