我可以在MySQL服务器上根据以下查询插入/更新数据.

INSERT INTO users (user_id, books) 
VALUES 
(1, “book1, book2”), 
(2, “book3, book4”) 
ON DUPLICATE KEY UPDATE books=“book1, book2”;

但是,有没有办法在UPDATE语句之后为每一行设置多个books列值?类似于下面的内容,但这很有效:)

INSERT INTO users (user_id, books) 
VALUES 
(1, “book1, book2”), 
(2, “book3, book4”) 
ON DUPLICATE KEY UPDATE books 
VALUES (“book1, book2”), (“book3, book4”);

如果这不是用于此目的的正确方法,我应该如何构造此类查询?

非常感谢您提前提供的指导,

道格

推荐答案

I assume that the duplicate key is the column user_id.

可以使用CASE表达式:

INSERT INTO users (user_id, books) VALUES 
(1, 'book1, book2'), 
(2, 'book3, book4') 
ON DUPLICATE KEY UPDATE 
books = CASE user_id
  WHEN 1 THEN 'book10, book20'
  WHEN 2 THEN 'book30, book40'
END;

See a simplified demo.

Mysql相关问答推荐

MariaDB字段+1

如何在JOIN中获取MySQL中的项目总数

从表中 Select 具有不同顺序的列

如何创建一个列,该列在另一个表中具有值的计数?

如何在 SQL 中迭代所有名称和排名排列

基于关系的每个实体有一个真值和多个假值

Mysql Pivot 查询/建议

在 SQL 中的 case 语句之后将新列转换为 INT

Golang Gorm:相同的查询构造不同,抛出不同的结果

Laravel 查询构建器 where() 用于何时产品必须有多个标签(使用 product_tags 数据透视表多对多)

INNER JOIN 问题(MySQL 错误代码:1054)

如何在不违反唯一约束的情况下交换 MySQL 中两行的值?

MySQL Workbench 无法加载 mysql.proc

在连接条件上使用 IS NULL 或 IS NOT NULL - 理论问题

utf8mb4_unicode_ci 与 utf8mb4_bin

MySQL:切换 int 字段值的简单方法

MySQL:唯一字段需要是索引吗?

MySQLgo 除非数字字符进行比较

在 MySQL Workbench 中导出超过 1000 条记录的查询结果

cron 启动的 mysqldump 和密码安全