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”
Wena brede !!!!!!!
Buena idea, me ha salvado de tener que hacer dos consultas.
Gracias… buena tu solucion
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)
)
muy bueno! de hecho así se puede reducir un poco el consumo de memoria 🙂