Обновить столбец из другой таблицы - mySQL 3.5.2 - PullRequest
1 голос
/ 14 октября 2008

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

Ответы [ 2 ]

2 голосов
/ 14 октября 2008

Когда я использовал 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, сгенерированный запросом выше.

0 голосов
/ 14 октября 2008

Многостоловые обновления не поддерживаются в MySQL <= 4.0.4 Я настоятельно рекомендую обновить ваш сервер до MySQL 5.0.xx </p>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...