Вопрос

Я попробовал пару подходов для обновления столбца в таблице базы данных 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top