Pergunta

Eu tentei um par de abordagens para atualizar uma coluna em uma tabela de banco de dados mySQL de outra tabela, mas não estou tendo nenhuma sorte.

Eu li em algum lugar que a versão 3.5.2 não suporta atualizações multi-mesa e eu preciso de uma solução baseada em código - que é correto

?

Se não, alguém pode me apontar na direção certa usando 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
Foi útil?

Solução

Quando eu costumava usar MySQL que não apoiou qualquer subconsultas ou atualizações multi-mesa, eu usei um truque para fazer o que você está descrevendo. Executar uma consulta cujos resultados são, elas próprias instruções SQL, e depois salvar a saída e de execução que como um 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 propósito, não existe tal 3.5.x versão do MySQL, tanto quanto eu sei. Eu acho que você pode ter relatado que errado. Ou então você está usando outro produto como mSQL.

Editar:. eu esqueci de adicionar um ponto e vírgula na instrução SQL gerada pela consulta acima

Outras dicas

Atualizações Multi-tabela não são apoiar no MySQL <= 4.0.4 Eu recomendo para atualizar seu servidor para MySQL 5.0.xx

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top