MySQL根据id

时间:2019-02-28 15:50:05

标签: 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,我想使用我拥有的文件来更新或向“类别”字段提供新信息。

2 个答案:

答案 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;