delete MySQL-UPDATE 1 つのクエリで異なる値を持つ複数の行



mysql 複数 テーブル (3)

私は異なる値を持つ複数の行を更新する方法を理解しようとしており、それを得ることはできません。 解決策はどこにでもありますが、私には理解しにくいようです。

たとえば、1つのクエリに3つの更新があります。

UPDATE table_users
SET cod_user = '622057'
    , date = '12082014'
WHERE user_rol = 'student'
    AND cod_office = '123456'; 

UPDATE table_users
SET cod_user = '2913659'
    , date = '12082014'
WHERE user_rol = 'assistant'
    AND cod_office = '123456'; 

UPDATE table_users
SET cod_user = '6160230'
    , date = '12082014'
WHERE user_rol = 'admin'
    AND cod_office = '123456'; 

私は例をreadたが、実際にはどのようにクエリを作成するのか分かりません。 すなわち:

UPDATE table_to_update
SET cod_user= IF(cod_office = '123456','622057','2913659','6160230')
    ,date = IF(cod_office = '123456','12082014')
WHERE ?? IN (??) ;

WHEREとIF条件に複数の条件がある場合、どのようにクエリを実行するかは完全にはわかりません。

https://ffff65535.com


MySQLでは、複数の更新を1つのクエリにまとめる読みやすい方法を提供します。 これは、あなたが記述したシナリオに一層合っているようであり、読みやすく、難しい複数の条件を避けることができます。

INSERT INTO table_users (cod_user, date, user_rol, cod_office)
VALUES
('622057', '12082014', 'student', '123456'),
('2913659', '12082014', 'assistant','123456'),
('6160230', '12082014', 'admin', '123456')
ON DUPLICATE KEY UPDATE
 cod_user=VALUES(cod_user), date=VALUES(date)

これは、 user_rol, cod_office組み合わせが主キーであることを前提としています。 これらのうちの1つだけがPKである場合、UPDATEリストに他のフィールドを追加します。 いずれもプライマリキーではない(そう思わない)場合、このアプローチは常に新しいレコードを作成します。おそらく必要なものではありません。

しかし、このアプローチは、準備されたステートメントを構築しやすくし、より簡潔にします。


CASE文を使用すると、複数のif / thenシナリオを処理できます。

UPDATE table_to_update 
SET  cod_user= CASE WHEN user_rol = 'student' THEN '622057'
                   WHEN user_rol = 'assistant' THEN '2913659'
                   WHEN user_rol = 'admin' THEN '6160230'
               END
    ,date = '12082014'
WHERE user_rol IN ('student','assistant','admin')
  AND cod_office = '17389551';

update table_name
set cod_user = 
    CASE 
    WHEN user_rol = 'student' THEN '622057'
    WHEN user_rol = 'assistant' THEN '2913659'
    WHEN user_rol = 'admin' THEN '6160230'?
    END,date = '12082014'

WHERE user_rol IN ('student','assistant','admin')
AND cod_office = '17389551';




sql-update