0
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 中使用?

4

1 回答 1

3

手册所述:

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

因此,您可以这样做:

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上查看。

于 2012-06-22T10:33:53.643 回答