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
È stato utile?

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top