MySQL – Error: You can’t specify target table xxx for update in FROM clause


Hace unos mins estuve jugando con una consulta en MySQL para poder insertar el orden de la búsqueda :
[sourcecode=”sql”]
INSERT INTO Tabla (nombre,fecha,texto,orden) values (‘”.$nombre.”‘,’”.$fecha.”‘,’”.$texto.”‘,(select max(orden)+1 from Tabla))
[/sourcecode]
pero me dió el error:
You can’t specify target table ‘Tabla’ for update in FROM clause
El error se da tanto en count, min, max
La solución simple es hacer un select desde una tabla “falsa” con un alias, mejor dicho en SQL:

[sourcecode=”sql”]
INSERT INTO Tabla (nombre,fecha,texto,orden) values (‘”.$nombre.”‘,’”.$fecha.”‘,’”.$texto.”‘,(
select max(orden)+1 from (select * from Tabla) as mi_tabla_falsa)
)
[/sourcecode]
Creo que no es necesario explicar el código, ¿o sí?

{actualización 13/09/2013}

Me cuenta Random que también se puede hacer así:

[sourcecode=”sql”]
INSERT INTO Tabla (nombre,fecha,texto,orden) values (‘”.$nombre.”‘,’”.$fecha.”‘,’”.$texto.”‘,(
select max(orden)+1 from Tabla as mi_tabla_falsa)
)

[/sourcecode]

{/actualización 13/09/2013}

Nota Mental: Leer esto cuando tenga el mismo error :B

saludos!

 

 


5 repuestas a “MySQL – Error: You can’t specify target table xxx for update in FROM clause”

  1. Gracias, aunque si le haces el alias a la tabla directo igual funciona 😉
    INSERT INTO Tabla (nombre,fecha,texto,orden) values (‘”.$nombre.”‘,’”.$fecha.”‘,’”.$texto.”‘,(
    select max(orden)+1 from Tabla as mi_tabla_falsa)
    )

Agregar un comentario

Su dirección de correo no se hará público.

This site uses Akismet to reduce spam. Learn how your comment data is processed.