Eu tenho uma tabela com descrições de produtos, e cada descrição de produto tem um product_id
e um language_id
. O que eu quero fazer é atualizar todos os campos com um language_id
de 2
para ser igual ao mesmo product_id
onde o language_id
está 1
.
Até agora eu tentei a seguinte consulta, mas estou recebendo erros indicando que o MySQL não deseja atualizar uma tabela onde a tabela também está sendo usada na subconsulta.
UPDATE
products_description AS pd
SET
pd.products_seo = (
SELECT
pd2.products_seo
FROM
products_description AS pd2
WHERE
pd2.language_id = 1
AND pd2.products_id = pd.products_id
)
WHERE
pd.language_id <> 1
Existe uma maneira "simples" de contornar essa limitação no MySQL? Ou algum "truque"? Estou um pouco surpreso que minha consulta não funcione, pois parece lógico.
Este é um negócio bastante arriscado, e eu posso entender o porquê. Tem a ver com a forma como o MySQL processa as subconsultas. Eu escrevi sobre isso em 22 de fevereiro de 2011: Problema com a subconsulta do MySQL
A execução de JOINs envolvendo SELECTs e SELECTs de subconsulta está OK. Por outro lado, UPDATEs e DELETE podem ser uma aventura que desafia a morte.
SUGESTÃO
Tente refatorar a consulta para que seja um INNER JOIN de duas tabelas
De uma chance !!!
Bem, isso não funcionou para mim, a atualização simplesmente não aconteceu, embora houvesse linhas correspondentes. O que eu tive que fazer é criar a outra tabela como subconsulta para que o arquivo temporário seja usado.