Aggiorna colonna da un'altra tabella - mySQL 3.5.2
-
03-07-2019 - |
Domanda
Ho provato un paio di approcci per aggiornare una colonna in una tabella del database mySQL da un'altra tabella ma non ho avuto fortuna.
Ho letto da qualche parte che la versione 3.5.2 non supporta gli aggiornamenti multi-tabella e ho bisogno di una soluzione basata su codice - è corretto?
Altrimenti nessuno può indicarmi la giusta direzione usando sql?
UPDATE products SET products_ordered = (
SELECT SUM(products_quantity)
FROM orders_products
WHERE products_id = products.products_id
);
o
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
Soluzione
Quando usavo MySQL che non supportava né subquery né aggiornamenti multi-tavolo, ho usato un trucco per fare quello che stai descrivendo. Eseguire una query i cui risultati sono essi stessi istruzioni SQL, quindi salvare l'output ed eseguirlo come 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;
A proposito, per quanto ne so non esiste una versione di MySQL 3.5.x. Penso che potresti averlo segnalato male. Oppure stai usando un altro prodotto come mSQL.
Modifica: Ho dimenticato di aggiungere un punto e virgola all'istruzione SQL generata dalla query precedente.
Altri suggerimenti
Gli aggiornamenti su più tabelle non sono supportati in MySQL < = 4.0.4 Consiglio vivamente di aggiornare il server a MySQL 5.0.xx