Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Error en un delete

Estas en el tema de Error en un delete en el foro de Mysql en Foros del Web. Hola tengo la siguiente consulta que no se me ejecuta. delete from clientes where IdGrupo = 3 and IdCliente >(Select min(IdCliente) from clientes where IdCliente ...
  #1 (permalink)  
Antiguo 26/07/2010, 13:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 1
Error en un delete

Hola tengo la siguiente consulta que no se me ejecuta.

delete from clientes where IdGrupo = 3 and IdCliente >(Select min(IdCliente) from clientes where IdCliente = IdCliente)

Si en vez de hacer delete hago la misma consulta con select * me trae los datos, pero no con delete. Por que puede ser.
Hice la consulta en mi gestor de sql y me da este error:
"You can't specify target table 'clientes' for update in FROM clause"

Desde ya muchas gracias!
  #2 (permalink)  
Antiguo 26/07/2010, 13:32
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Error en un delete

Prueba asi:

delete from clientes where IdGrupo = 3 and IdCliente >(Select min(IdCliente) from clientes as clientes2 where IdCliente = IdCliente)
  #3 (permalink)  
Antiguo 26/07/2010, 13:44
 
Fecha de Ingreso: mayo-2008
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Error en un delete

Gracias por la respuesta pero no...

Sigue apareciendo el mismo erros.

You can't specify target table 'clientes' for update in FROM clause
  #4 (permalink)  
Antiguo 26/07/2010, 14:05
Avatar de Vun
Vun
Colaborador
 
Fecha de Ingreso: agosto-2009
Ubicación: Benalmádena, España
Mensajes: 2.265
Antigüedad: 15 años, 3 meses
Puntos: 150
Respuesta: Error en un delete

Prueba esto

delete from clientes where IdGrupo = 3 and IdCliente >(Select min(IdCliente) from clientes as clientes2 where clientes.IdCliente = clientes2.IdCliente)

O tambien asegurate que funciona algo asi:

delete from clientes where IdGrupo = 3 and IdCliente >10

Por ir acotando....
  #5 (permalink)  
Antiguo 26/07/2010, 14:27
 
Fecha de Ingreso: mayo-2008
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Error en un delete

mmmm no seguimos igual.
Lo que me parece mas raro es que si yo hago un select me trae los datos pero con delete no....

Por que puede ser...?
  #6 (permalink)  
Antiguo 26/07/2010, 14:48
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 9 meses
Puntos: 360
Respuesta: Error en un delete

Mira esto
http://dev.mysql.com/doc/refman/5.0/es/delete.html

haz pruebas por este lado.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 26/07/2010, 19:01
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Error en un delete

Cita:
mmmm no seguimos igual.
Lo que me parece mas raro es que si yo hago un select me trae los datos pero con delete no....

Por que puede ser...?
¿Has intentado podar un árbol cortando la misma rama en la que estás parado?
Bueno, desde la óptica de las bases de datos, eso es lo que estas haciendo: Estás invocando en un subselect la misma tabla sobre la que estás borrando... Eso no se puede hacer porque el DBMS no puede resolver a priori si uno de los registros que el subselect lee no será el mismo que estás borrando, y en ese caso ¿en qué estado está? ¿Borrado o legible?

Bien, el tema es que quieres borrar de la tabla clientes a todos los clientes que pertenezcan al grupo 3 y que al mismo tiempo, su ID sea mayor al menor de todos los clientes registrados...
Al menos eso es lo que se desprende de esto:
Código MySQL:
Ver original
  1. delete from clientes where IdGrupo = 3 and IdCliente >(Select min(IdCliente) from clientes where IdCliente = IdCliente)
Lo que no se comprende es la lógica de lo que estás haciendo: ¿Y si cliente de menor ID pertenece también al grupo 3? Eso haría que se borrase sólo el a partir del segundo miembro del grupo.
Sería mejor, a mi entender, que primero definas un poco mejor cuál es el cliente o clientes que quieres eliminar, es decir: Plantea un criterio que sea consistente y luego veremos cómo hacerlo (aunque me arriesgo a anticipar que para hacer eso requerirás de dos consultas).
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 27/07/2010, 06:45
 
Fecha de Ingreso: mayo-2008
Mensajes: 111
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Error en un delete

Cita:
Iniciado por gnzsoloyo Ver Mensaje
¿Has intentado podar un árbol cortando la misma rama en la que estás parado?
Bueno, desde la óptica de las bases de datos, eso es lo que estas haciendo: Estás invocando en un subselect la misma tabla sobre la que estás borrando... Eso no se puede hacer porque el DBMS no puede resolver a priori si uno de los registros que el subselect lee no será el mismo que estás borrando, y en ese caso ¿en qué estado está? ¿Borrado o legible?

Bien, el tema es que quieres borrar de la tabla clientes a todos los clientes que pertenezcan al grupo 3 y que al mismo tiempo, su ID sea mayor al menor de todos los clientes registrados...
Al menos eso es lo que se desprende de esto:
Código MySQL:
Ver original
  1. delete from clientes where IdGrupo = 3 and IdCliente >(Select min(IdCliente) from clientes where IdCliente = IdCliente)
Lo que no se comprende es la lógica de lo que estás haciendo: ¿Y si cliente de menor ID pertenece también al grupo 3? Eso haría que se borrase sólo el a partir del segundo miembro del grupo.
Sería mejor, a mi entender, que primero definas un poco mejor cuál es el cliente o clientes que quieres eliminar, es decir: Plantea un criterio que sea consistente y luego veremos cómo hacerlo (aunque me arriesgo a anticipar que para hacer eso requerirás de dos consultas).
Gracias por tu respuesta.
Basicamente lo que necesito hacer es supongamos que tengo 3 registros solo dejar el menor. Por lo tanto borrar los mayores.

Entiendo lo que me dices de cortar la rama en la que estoy parado. Pero entonces como hago??? Por que la verdad que no lo se. Si me puedes ayudar te lo agradeceria enormemente!.

Etiquetas: delete
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:48.