在重复键更新中使用不同列插入select

时间:2012-06-22 07:21:34

标签: mysql on-duplicate-key

INSERT INTO options (owner, name, value, modified)
SELECT owner, name, value, modified, @draft:=draft FROM
(
    ...
) `options`
ON DUPLICATE KEY UPDATE value=VALUES(value), modified=@draft

上面的错误,列数与行数不匹配。

有没有一种方法可以将列选入@draft而不将其作为插入值的一部分包含在内但是它可以在DUPLICATE KEY UPDATE中使用?

1 个答案:

答案 0 :(得分:3)

the manual中所述:

  

ON DUPLICATE KEY UPDATE的值部分中,只要您不在SELECT部分使用GROUP BY,就可以引用其他表格中的列。一个副作用是您必须在值部分中限定非唯一列名称。

因此,您可以这样做:

INSERT INTO options (owner, name, value, modified)
  SELECT owner, name, value, modified FROM ( ... ) options2
ON DUPLICATE KEY UPDATE value=VALUES(value), modified=options2.draft

sqlfiddle上查看。