次のことをしたいと思います。次のような別のフィールドの値に基づいてフィールドを更新します
update table set if(fielda=1){fieldb=2 fieldc=3}else{fieldd=2 fielde=3}
私はこれが有効なmysqlではないことを知っていますが、問題を説明するための最良の方法です。
次のことをしたいと思います。次のような別のフィールドの値に基づいてフィールドを更新します
update table set if(fielda=1){fieldb=2 fieldc=3}else{fieldd=2 fielde=3}
私はこれが有効なmysqlではないことを知っていますが、問題を説明するための最良の方法です。
update table set
b = case when a = 1 then 2 else b end,
c = case when a = 1 then 3 else c end,
d = case when a = 1 then d else 2 end,
e = case when a = 1 then e else 3 end
あなたのコメントによると、これを試してください:
update table set
datefield_a = case when field_a = 1 then now() else datefield_a end,
datefield_b = case when field_a <> 1 then now() else datefield_b end
この構文は、指定しようとした結果を達成すると思います。
UPDATE mytable
SET fieldb = CASE WHEN fielda = 1 THEN 2 ELSE fieldb END
, fieldc = CASE WHEN fielda = 1 THEN 3 ELSE fieldc END
, fieldd = CASE WHEN fielda = 1 THEN fieldd ELSE 2 END
, fielde = CASE WHEN fielda = 1 THEN fielde ELSE 3 END
ここでの「トリック」は、4つの列すべてを更新することですが、一部の「ケース」では、列の現在の値を列に割り当てて戻すため、列の値は実際には変更されません。(そのアイデアに頭を悩ませたら、それは非常に簡単です。)
MySQLには、便利なIF関数(他のほとんどのRDBMSでは使用できません)があり、これを使用して少し短縮し、同じことを実現できます。
UPDATE mytable
SET fieldb = IF(fielda = 1, 2, fieldb)
, fieldc = IF(fielda = 1, 3, fieldc)
, fieldd = IF(fielda = 1, fieldd, 2)
, fielde = IF(fielda = 1, fielde, 3)
苦痛は、同じ条件付きテストを複数回繰り返さなければならないことです。
テーブルを1回スキャンすると(これらのステートメントのように)、これらすべての割り当てを1回の急降下で実行することは、これを分割して複数のステートメントを使用して割り当てを段階的に実行するよりも高速(かつ効率的)になります。