Usando a mesma tabela durante UPDATE na cláusula WHERE

Categoria: MySQL
Publicado em 28 de Novembro de 2010

Este código SQL irá gerar um erro ( "You can't specify target table 'jos_menu' for update in FROM clause" ):

1
2
3
4
5
6
7
8
9
UPDATE 
   jos_menu 
SET 
   published = 0 
WHERE 
   id = (
      SELECT id FROM jos_menu 
      WHERE alias = 'sugestoes-a-escolhas' ORDER BY id DESC LIMIT 0,1
   );

Uma pequena alteração permite o uso:

1
2
3
4
5
6
7
8
9
UPDATE 
   jos_menu 
SET 
   published = 0 
WHERE 
   id = ( SELECT id FROM (
      SELECT id FROM jos_menu 
      WHERE alias = 'sugestoes-a-escolhas' ORDER BY id DESC LIMIT 0,1
   ) t1 );
 

Copyright © Fernando Hidemi Uchiyama 2010 - Todos os direitos reservados