Mettre à jour la colonne à partir d'une autre table - MySQL 3.5.2
-
03-07-2019 - |
Question
J'ai essayé plusieurs méthodes pour mettre à jour une colonne d'une table de base de données mySQL à partir d'une autre table, mais je n'ai aucune chance.
J'ai lu quelque part que la version 3.5.2 ne prend pas en charge les mises à jour multi-tables et que j'ai besoin d'une solution basée sur un code - est-ce correct?
Si non, quelqu'un peut-il m'indiquer la bonne direction en utilisant SQL?
UPDATE products SET products_ordered = (
SELECT SUM(products_quantity)
FROM orders_products
WHERE products_id = products.products_id
);
ou:
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
La solution
Lorsque j’utilisais MySQL sans prendre en charge les sous-requêtes ni les mises à jour multi-tables, j’utilisais une astuce pour faire ce que vous décrivez. Exécutez une requête dont les résultats sont eux-mêmes des instructions SQL, puis enregistrez la sortie et exécutez-la en tant que script 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;
En passant, il n’existe pas de version MySQL 3.5.x à ma connaissance. Je pense que vous avez peut-être rapporté que mal. Sinon, vous utilisez un autre produit tel que mSQL.
Modifier: j'ai oublié d'ajouter un point-virgule dans l'instruction SQL générée par la requête ci-dessus.
Autres conseils
Les mises à jour multi-tables ne sont pas prises en charge dans MySQL < = 4.0.4 Je recommande fortement de mettre à jour votre serveur vers MySQL 5.0.xx