27

ケースステートメントを使用してテーブル内の複数の列を更新したいのですが、これを行う方法が見つかりません (これは可能ですか)。次の無効な参照クエリを思いつきました。

UPDATE tablename SET
    CASE name
        WHEN 'name1' THEN col1=5,col2=''
        WHEN 'name2' THEN col1=3,col2='whatever'
        ELSE col1=0,col2=''
    END;

有効な SQL で期待される結果を達成する方法はありますか?

4

3 に答える 3

41
UPDATE tablename
SET col1 = CASE WHEN name = 'name1' THEN 5 
                WHEN name = 'name2' THEN 3 
                ELSE 0 
           END
 , col2 = CASE WHEN name = 'name1' THEN '' 
               WHEN name = 'name2' THEN 'whatever' 
               ELSE '' 
          END
;
于 2012-12-02T21:16:18.250 に答える
9

あなたが求めていることを行うためのきれいな方法を知りません。同等の有効な SQL 更新は次のようになります。

UPDATE tablename SET
    col1 = CASE name WHEN 'name1' THEN 5 WHEN 'name2' THEN 3 ELSE 0 END,
    col2 = CASE name WHEN 'name1' THEN '' WHEN 'name2' THEN 'whatever' ELSE '' END;

もちろん、これはきれいではなく、同じケース (例: 'name1') を複数回繰り返す必要がありますが、他の方法では不可能だと思います。

于 2012-12-02T21:16:56.860 に答える
1

一意のインデックスがあり、値がテーブルに存在することがわかっている場合nameは、次のトリックを使用できます。

INSERT INTO tablename (name, col1, col2)
VALUES ('name1', 5, '')
     , ('name2', 3, 'whatever')
ON DUPLICATE KEY UPDATE
       col1 = VALUES(col1)
     , col2 = VALUES(col2);

デフォルト値のない追加NOT NULLの列がある場合は、それらにダミーの値を追加する必要があります。それらを から除外するON DUPLICATE KEY UPDATEと、無視されます。

于 2016-08-25T23:29:59.387 に答える