2012-06-22 47 views
0
INSERT INTO options (owner, name, value, modified) 
SELECT owner, name, value, modified, @draft:=draft FROM 
(
    ... 
) `options` 
ON DUPLICATE KEY UPDATE value=VALUES(value), [email protected] 

以上将与列计数错误不匹配行计数。插入选择使用不同的列重复键更新

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

回答

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

+0

谢谢,管理错过手册中的信息。 – Alex