MySQL根据id更新多行

标签 mysql database

在 MySQL 的表中,我尝试根据 id 更新特定字段。

该表有超过 5,000 行和许多字段。其中一个字段是“id”,我要更新的另一个字段称为“category”,现在所有字段都是 NULL,我想更新所有字段他们。

我想使用的备份mysql文件只有“id”“category”,它们是这样的:

INSERT INTO `products` (`id`, `category`) VALUES
(3, 1),
(4, 1),
(5, 2),
(6, 1),
(7, 5),
(8, 1),
(9, 6),
(10, 1),
...
(5000, 3);

我想根据此列表中的 ID 更新表中的“类别”字段,并且因为有超过 5,000 行,所以我不想手动更改每条记录。

现在在我的表中,所有“类别”字段都是 NULL,我想使用我拥有的文件更新“类别”字段或为“类别”字段提供新信息。

最佳答案

最简单的是使用临时表:

CREATE TEMPORARY TABLE temp_products (id int, category int ) ;

然后

INSERT INTO `temp_products` (`id`, `category`) VALUES
(3, 1),
(4, 1),
(5, 2),
(6, 1),
(7, 5),
(8, 1),
(9, 6),
(10, 1),
...
(5000, 3);

现在您只需使用带有内部联接的更新:

Update products p
INNER JOIN temp_products t_p ON t_p.id = p.id
SET p.category = t_p.category

如果您愿意,可以添加 where 子句:

Update products p
INNER JOIN temp_products t_p ON t_p.id = p.id
SET p.category = t_p.category
WHERE p.category IS NULL

关于MySQL根据id更新多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54929509/

相关文章:

mysql - 触发语句写入错误

c# - 带Where 子句的Linq 左连接

mysql - 如何连接数据库和表,其中数据库名称源自当前表中的字段?

php - 合并表以获得相同的 user_id

database - 从坐标 POSTGIS 创建的线串

php - 无法创建表 errno : 150 on Mysql

c# - 数据存储在哪里?

php - 使用 MySQL 数据填充 div,将行与编号 ID 匹配

ruby-on-rails - rake db :migrate db:reset and db:schema:load之间的区别

mysql - 如何将 JSON 对象转换为 MySQL 行?