web-dev-qa-db-ja.com

MySqlの条件付き更新

テーブルから値を更新しようとしていますが、いくつかの条件を追加する必要があります。 CASE関数を見つけましたが、それが最良の方法であるかどうかはわかりません。以下に例を示します。

私のテーブルは、例えば「関係」です

 userid1 | userid2 | name1 | name2 

私は例えば得た:

SELECT * 
  FROM realtion 
 WHERE (userid1 = 3 AND userid2 = 4)
    OR (userid1 = 4 AND userid2 = 3);  

出力:

     
 4 | 3 | bill | jack 

そして、私は3と4の間の関係でユーザー3の名前を変更したいのですが、それがuserid1であるかuserid2であるかわかりません。

私は場合の

UPDATE relation 
   CASE WHEN userid1 = 3 THEN SET name1 = 'jack' END 
        WHEN userid2 = 3 THEN SET name2 = 'jack' END 
 WHERE (userid1 = 3 AND userid2 = 4) 
    OR (userid1 = 4 AND userid2 = 3);

しかし、それは機能しません!何か案は?事前に感謝します。

26
Pierre Lebon

残念ながら、最後に何を取得したいかはあまり明確ではありませんが、SETで条件付きUPDATEを正しく使用する方法は次のとおりです。

UPDATE relation 
   SET name1 = CASE WHEN userid1 = 3 THEN 'jack' ELSE name1 END,
       name2 = CASE WHEN userid2 = 3 THEN 'jack' ELSE name2 END
WHERE (userid1 = 3 AND userid2 = 4) 
   OR (userid1 = 4 AND userid2 = 3);

これはSQLFiddleデモです。

48
peterm