coluna de atualização de outra tabela - mySQL 3.5.2
-
03-07-2019 - |
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
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