mysql - 在重复键更新中使用不同列插入选择

标签 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中,而不将其包含在插入值中,但可以在重复键更新中使用?

最佳答案

the manual 中所述:

In the values part of ON DUPLICATE KEY UPDATE, you can refer to columns in other tables, as long as you do not use GROUP BY in the SELECT part. One side effect is that you must qualify nonunique column names in the values part.

因此,你可以这样做:

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 .

关于mysql - 在重复键更新中使用不同列插入选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11151805/

相关文章:

mysql - 如何在 GlassFish 服务器中使用 asadmin 工具创建 mysql 连接池?

mysql - Django数据库迁移报错: duplicate key

php - ON DUPLICATE KEY UPDATE - 当 if 语句为 true - 更新列,否则触发 1062 错误以捕获重复

mysql - 特定索引或组合索引的重复键更新

php - 使用 laravel 从多个表进行多个查询

MySql查询统计每个用户的分数

php - 缩放 mysql 插入的方法

php - mysql获取数组

mysql - 在重复的 mysql 查询上插入 select

mysql - 关于重复 key 更新 - 优先级