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 UPDATE语法中所述:

您可以使用子句中的函数来引用语句部分中的列值。换句话说,在子句中是指将被插入的值,没有发生重复键冲突。此功能在多行插入中特别有用。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 回答