MySql Update Uma tabela associada

Eu quero atualizar uma tabela em uma instrução que tem várias associações. Embora eu saiba que a ordem das junções não é realmente importante (a menos que você esteja usando dicas do otimizador), ordenei-lhes uma forma de serem mais intuitivas de serem lidas. No entanto, isso resulta na tabela que eu quero atualizar não sendo aquela com a qual eu começo, e estou tendo problemas para atualizá-la.

Um exemplo fictício do que eu gostaria de fazer é algo como:

UPDATE b FROM tableA a JOIN tableB b ON a.a_id = b.a_id JOIN tableC c ON b.b_id = c.b_id SET b.val = a.val+c.val WHERE a.val > 10 AND c.val > 10; 

Há muitos posts sobre atualização com joins aqui, no entanto, eles sempre têm a tabela sendo atualizada primeiro. Eu sei que isso é possível no SQL Server e espero que seja possível no MySQL Too!

A syntax UPDATE de múltiplas tabelas no MySQL é diferente do Microsoft SQL Server. Você não precisa dizer qual (is) tabela (s) você está atualizando, isso está implícito na sua cláusula SET.

 UPDATE tableA a JOIN tableB b ON a.a_id = b.a_id JOIN tableC c ON b.b_id = c.b_id SET b.val = a.val+c.val WHERE a.val > 10 AND c.val > 10; 

Não há nenhuma cláusula FROM na syntax do MySQL.

UPDATE with JOIN não é um SQL padrão, e tanto o MySQL quanto o Microsoft SQL Server implementaram suas próprias idéias como uma extensão da syntax padrão.

Você tem a ordem das declarações erradas. Você pode ler a syntax aqui (eu sei, é muito difícil de ler.

 UPDATE tableA a JOIN tableB b ON a.a_id = b.a_id JOIN tableC c ON b.b_id = c.b_id SET b.val = a.val+c.val WHERE a.val > 10 AND c.val > 10; 

sql violino

Este link deve dar a syntax que o MySQL precisa e aqui está um exemplo. Por que você precisa juntar as duas tabelas? é limitar os registros atualizados? Eu estou perguntando porque você também pode fazer algo como o seguinte:

 update B set Bx= where B. is in( select Ay from A left outer join B on A.=B. ) 
Intereting Posts