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使用しない限り、他のテーブルの列を参照できます。副作用の 1 つは、値の部分で一意でない列名を修飾する必要があることです。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 に答える