SET

2016-12-18 9 views
0

私はMYSQLでの新たなんだと、私はこれをやろうとしている(?):SET

UPDATE team 
SET member1 = IF(member1=0, 001, SET member2 = IF(member2=0, 001, member2)) WHERE ID = ?; 

これは説明、機能していません。 各「部材」(別の番号を持っています001,002,003 ...)、メンバー "001"をテーブル "member1"に入れたいが、これがocupated(値が0である)の場合、メンバー "001"をテーブル "member2"に設定する"(別のテーブル)、IFの中にSETを置くことはできないと思います。 idは重要ではない。注目を集めるため

おかげで^^

答えて

1

ありませんあなたはこのようなSETステートメントに参加することはできません。それは回避する必要があります:

UPDATE `team` 
SET 
    `member2` = CASE WHEN `member1` = 0 AND `member2` = 0 THEN '001' ELSE `member2` END, 
    `member1` = CASE WHEN `member1` = 0 THEN '001' ELSE `member1` END 
WHERE 
    `id` = ? 
/* optional filter: considering adding it if it does not bother the performance: */ 
AND (`member1` != 0 OR `member2` != 0) 
; 

注:私は、テーブル名とカラム名を中心にバッククォートを使用

  • 私はあなたがそう *
  • は、私が代わりにCASE/WHENを使用しませんお勧めしますIFの場合、IFはansi sqlではないため(mysqlに固有です)
  • 1つではなく2つのクエリを実行することもできます。これにより、where句でフィルタを使用できるため、必須でないときに列を更新する必要はありません。

*ボヘミアンによって指摘されているように、それらはansiではありません。私は彼らが提供する構造的および視覚的なヘルプのためにそれらを使用するのが好きです。

+0

彼らはあまりにも非ANSIあるので、私は、*バッククォートを使用していない*お勧めしますと、彼らは、コードのノイズ – Bohemian

+0

を導入したので、私は、私はあなたのコード 'member2' = CASEに変更したコード –

+1

のこの部分を変更したときに、' member1' = 0と ' member2'!= 0 THEN '001' ELSE 'member2' END、 とそれが完璧に動作しています!非常に仲間ありがとう! –