Обновить столбец из другой таблицы - MySQL 3.5.2
-
03-07-2019 - |
Вопрос
Я попробовал пару подходов для обновления столбца в таблице базы данных MySQL из другой таблицы, но мне не повезло.
Я где-то читал, что версия 3.5.2 не поддерживает многостоловые обновления, и мне нужно решение на основе кода - это правильно?
Если нет, может ли кто-нибудь указать мне правильное направление, используя sql?
UPDATE products SET products_ordered = (
SELECT SUM(products_quantity)
FROM orders_products
WHERE products_id = products.products_id
);
или:
Create temporary table my_temp_table
as
SELECT products_id, SUM(products_quantity) as total
FROM orders_products
GROUP BY products_id
UPDATE products, my_temp_table
SET products.products_ordered = my_temp_table.total
WHERE products.products_id = my_temp_table.products_id
Решение
Когда я использовал MySQL, который не поддерживал ни подзапросы, ни многостоловые обновления, я использовал трюк, чтобы сделать то, что вы описываете.Запустите запрос, результаты которого сами по себе являются операторами SQL, а затем сохраните выходные данные и запустите их как SQL-скрипт.
SELECT CONCAT(
'UPDATE products SET products_ordered = ',
SUM(products_quantity),
' WHERE product_id = ', products_id, ';') AS sql_statement
FROM orders_products
GROUP BY products_id;
Кстати, насколько я знаю, такой версии MySQL 3.5.x не существует.Я думаю, что вы, возможно, сообщили об этом неправильно.Или же вы используете другой продукт, такой как mSQL.
Редактировать: Я забыл добавить точку с запятой в инструкцию SQL, сгенерированную приведенным выше запросом.
Другие советы
Обновления с несколькими таблицами не поддерживаются в MySQL <= 4.0.4 Я бы настоятельно рекомендовал обновить ваш сервер до версии MySQL 5.0.xx