在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,我想使用我拥有的文件来更新或向“类别”字段提供新信息。
答案 0 :(得分:0)
最简单的方法是使用临时表:
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
答案 1 :(得分:0)
也许对您来说更好的解决方案是:
首先,创建临时表
CREATE TABLE `products_tmp` (
`id` INT NOT NULL,
`category` INT NOT NULL,
PRIMARY KEY (`id`)
);
然后,在生成的临时表中执行插入操作:
INSERT INTO `products_tmp` (`id`, `category`) VALUES
(3, 1),
(4, 1),
(5, 2),
(6, 1),
(7, 5),
(8, 1),
(9, 6),
(10, 1),
...
(5000, 3);
此后,您可以更新原始表中的所有字段:
UPDATE products p
JOIN products_tmp pt ON p.id = pt.id
SET p.category = pt.category;
此后,您可以删除临时表
drop table products_tmp;