MySQL обновляет несколько строк на основе идентификатора - PullRequest
0 голосов
/ 28 февраля 2019

В таблице в MySQL я пытаюсь обновить определенное поле на основе идентификатора.

Таблица содержит более 5000 строк и много полей.Одним из полей является "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);

Я хочу обновить поле "категория" в моей таблице в соответствии с идентификаторами в этом списке, и потому что естьболее 5000 строк Я не хочу менять каждую запись вручную.

Прямо сейчас в моей таблице все поля "category" имеют значение NULL, и я хочу обновить или предоставить новую информацию в поля "category", используяфайл, который у меня есть.

Ответы [ 2 ]

0 голосов
/ 28 февраля 2019

Возможно, лучшим решением для вас может быть:

Прежде всего, создайте временную таблицу

 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;
0 голосов
/ 28 февраля 2019

Самое простое - использовать временную таблицу:

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

Если хотите, вы можете добавить , где предложение:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...