Caseステートメントを使用してテーブルの複数の列を更新したいのですが、これを行う方法が見つかりません(これも可能です)。私は次の無効な参照クエリを思いつきました:
UPDATE tablename SET
CASE name
WHEN 'name1' THEN col1=5,col2=''
WHEN 'name2' THEN col1=3,col2='whatever'
ELSE col1=0,col2=''
END;
有効なSQLで期待される結果を達成する方法はありますか?
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
;
私はあなたが求めていることをするためのきれいな方法を知りません。同等の有効な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'
)複数回ですが、他の方法では可能だとは思いません。
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
から外すだけで、無視されます。