1

4つの列を持つテーブル(TABLE1)があります。

UID | PID | VALUE1 | VALUE2

他のいくつかのテーブルから3つの列を返す別のSQLステートメント(STMT)があります。

UID | PID | VALUE1

これが、TABLE1を更新する方法の条件です。

まず、STMTのUIDとPIDのペアを表1のものと比較します。

  1. TABLE1にないすべての新しいUIDとPIDのペアについて、STMTからTABLE1に新しい行を挿入し、TABLE1.VALUE2 = 0に設定します(これはすでに実行しています)

  2. STMTとTABLE1の両方にある既存のUIDとPIDのペアについては、次のようにします。

    a。TABLE1.VALUE2> 0の場合、TABLE1.VALUE1=STMT.VALUE1を更新します

    b。TABLE1.VALUE2 = 0の場合、およびTABLE1.VALUE1!= STMT.VALUE1の場合、TABLE1.VALUE1 = STMT.VALUE1を更新します。それ以外の場合は、何もしません。

条件2の解決策を思い付くのに苦労しています。助けていただければ幸いです。

4

2 に答える 2

2
UPDATE (
    SELECT table1.UID
           ,table1.PID
           ,table1.value1 AS table1_value1
           ,table1.value2 AS table1_value2
           ,stmt.value1 AS stmt_value1
    FROM table1
    INNER JOIN (SELECT ? AS UID
                       ,? AS PID
                       ,? AS value1
                FROM whatever) stmt
        ON stmt.UID = table1.UID
        AND stmt.PID = table1.PID
) x
SET x.table1_VALUE1 = CASE WHEN (x.table1_VALUE2 > 0) OR
                              (x.table1_VALUE2 = 0 AND x.table1_VALUE1 <> x.stmt_VALUE1)
                              THEN x.stmt_VALUE1
                         ELSE x.table1_VALUE1 
                    END
于 2012-06-04T17:19:34.163 に答える