1

TableA : ID、メール、チーム、[その他の列]

TableB : ID、メール、チーム、[その他の列]

ID は両方のテーブルの主キーです。TableB と のすべての行を処理する必要があります。

  1. ID が TableA に存在しない場合は、新しい行を挿入します - 列 ID、メール、チームを使用 (のみ)
  2. ID が TableA に存在する場合、メールの新しい値で行を更新します (のみ)
  3. TableA には存在するが TableB の行には存在しない ID は変更しないでください

私は持っている :

INSERT INTO tablea (id,mail,team) (SELECT id,mail,team FROM tableb)
ON DUPLICATE KEY update tablea SET tablea.mail=tableb.mail;

これは機能しません-最後のSETコマンドを有効にするために結合が必要だと思いますが、この部分についてはわかりません。誰か助けてもらえますか?

どうもありがとう

4

1 に答える 1

0

INSERT ... ON DUPLICATE KEY UPDATESyntaxの下に記載されているように:

句で関数を使用して、ステートメントの部分から列の値を参照できます。つまり、句では、重複キーの競合が発生しなかった場合に挿入される値を参照します。この関数は、複数行の挿入で特に役立ちます。VALUES(col_name)UPDATEINSERTINSERT ... ON DUPLICATE KEY UPDATEVALUES(col_name)ON DUPLICATE KEY UPDATEcol_name

したがって:

INSERT INTO tablea (id, mail, team)
SELECT id, mail, team FROM tableb
ON DUPLICATE KEY UPDATE mail = VALUES(mail)
于 2012-09-16T22:34:07.777 に答える