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

Delete sin select

Estas en el tema de Delete sin select en el foro de Mysql en Foros del Web. HOla, sabeis que le pasa a esta consulta? Estoy intentando borrar todas las denuncias de todos los comentarios que pueda tener una foto: DELETE FROM ...
  #1 (permalink)  
Antiguo 08/03/2011, 02:23
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Delete sin select

HOla, sabeis que le pasa a esta consulta?

Estoy intentando borrar todas las denuncias de todos los comentarios que pueda tener una foto:

DELETE FROM denuncias d WHERE d.ID_SECCION = 9 AND d.ID_ELEMENTO IN (SELECT c.ID FROM comentarios c WHERE ID_ELEMENTO = $idFoto AND ID_SECCION = 8)
  #2 (permalink)  
Antiguo 08/03/2011, 06:46
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: Delete sin select

Bueno, sin saber cómo son las tablas, exactamente cómo se vinculan, y qué representan SECCION y ELEMENTO, es imposible saber si hace lo que realmente pides.
Por otro lado, no nos estás diciendo qué problema te causa a ti la sentencia.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/03/2011, 07:06
 
Fecha de Ingreso: septiembre-2010
Mensajes: 10
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Delete sin select

no se si tiene algo que ver que pongas "cometarios c" en vez de "comentarios as c" y lo mismo para la tabla denuncias.

pero el problema supongo que sera el $idFoto, supongo que sera una variable y no un valor
  #4 (permalink)  
Antiguo 08/03/2011, 08:23
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: Delete sin select

El AS no tiene nada que ver porque fue eliminado del estandar ANSI-SQL hace ya varios años. Ahora se puede usar opcionalmente, pero sólo se requiere cuando usas DBMS muy viejos ,de más de siete años atrás (poco probable).
Los ,tutoriales y manuales suelen todavía incluirlo porque los ejemplos que usan son muy viejos, no porque sea necesario.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/03/2011, 09:05
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Delete sin select

Bueno en teoria los campos no deberian importar que son, por que me pone error de contruccion de la consulta... no se si se me pasa algun detalle que tengo mal.

ID_SECCION es para decir a que nnos referimos (noticias, videos, comentarios...) ID_ELEMENTO es el video o la noticia o el coment o...
  #6 (permalink)  
Antiguo 08/03/2011, 11:50
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: Delete sin select

No existe algo llamado "error en construcción de consulta". Lo que puede existir es un error de sintaxis en una consulta, que no es exactamente lo mismo.
Por otro lado, no queda suficientemente claro si esos dos campos mencionados son FK de otra tabla o so claves propias. Cuando describas una relación de tablas es mejor que seas más detallado, porque esa información ayuda mucho a entender lo que se está tratando de lograr.
En tu caso, parece haber relaciones entre tablas que pueden tener impacto en la lógica de la consulta.

Tu consulta:
Código MySQL:
Ver original
  1. DELETE FROM denuncias d
  2.     d.ID_SECCION = 9
  3.     AND
  4.     d.ID_ELEMENTO IN
  5.                            (SELECT c.ID
  6.                            FROM comentarios c
  7.                            WHERE
  8.                                ID_ELEMENTO = $idFoto
  9.                                AND
  10.                                ID_SECCION = 8)
está sintácticamente bien escrita, pero depende de si la variable $idFoto está llegando o no llena. Si por alguna razón el valor de la variable no existe, la sentencia finalmente quedaría así al ejecutarse:
Código MySQL:
Ver original
  1. DELETE FROM denuncias d
  2.     d.ID_SECCION = 9
  3.     AND
  4.     d.ID_ELEMENTO IN
  5.                            (SELECT c.ID
  6.                            FROM comentarios c
  7.                            WHERE
  8.                                ID_ELEMENTO =
  9.                                AND
  10.                                ID_SECCION = 8)
lo que daría lugar a un error de sintaxis producto del PHP mal debuggeado.
Fuera de eso, no hay problemas visibles.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 09/03/2011, 02:49
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Delete sin select

Bueno el debug lo hace bien, pero para no equivocarme en estos casos cojo directamente la consulta y la pego en el phpMyAdmin.

Esta es la consulta:
Código MySQL:
Ver original
  1. DELETE FROM denuncias d WHERE d.ID_SECCION = 9 AND d.ID_ELEMENTO IN (SELECT c.ID FROM comentarios c WHERE c.ID_ELEMENTO = 20 AND c.ID_SECCION = 8)


Este es el error que me da:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'd WHERE d.ID_SECCION = 9 AND d.ID_ELEMENTO IN (SELECT c.ID FROM comentarios c WH' at line 1



En cambio usando select va sin problemas...
Código MySQL:
Ver original
  1. SELECT * FROM denuncias d WHERE d.ID_SECCION = 9 AND d.ID_ELEMENTO IN (SELECT c.ID FROM comentarios c WHERE c.ID_ELEMENTO = 20 AND c.ID_SECCION = 8)
  #8 (permalink)  
Antiguo 09/03/2011, 05:40
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: Delete sin select

Cita:
En cambio usando select va sin problemas...
SELECT y DELETE no hacen la misma cosa. No implica que una esté bien y la otra mal.

Lo importante es que la sentencia contiene algún error, y aunque te parezca increíble, el problema son los alias.
Pruébala así:

Código MySQL:
Ver original
  1. DELETE FROM denuncias
  2. WHERE ID_SECCION = 9
  3.     AND  ID_ELEMENTO IN  (SELECT c.ID FROM comentarios c WHERE c.ID_ELEMENTO = 20 AND c.ID_SECCION = 8);

Al menos en mis pruebas, eso es lo que pasó.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #9 (permalink)  
Antiguo 10/03/2011, 14:55
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Delete sin select

Cada dia se aprende algo.... PERFECTO.
¿Por que pasa eso?
  #10 (permalink)  
Antiguo 10/03/2011, 17:12
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: Delete sin select

Aparentemente MySQL soporta los alias en el DELETE sólo para el JOIN, o al menos en una sintaxis definida:
Código MySQL:
Ver original
  1. DELETE d FROM denuncias d
  2. WHERE d.ID_SECCION = 9
  3.     AND  d.ID_ELEMENTO IN  (SELECT c.ID FROM comentarios c WHERE c.ID_ELEMENTO = 20 AND c.ID_SECCION = 8);
Pero no la soporta de esta forma:

Código MySQL:
Ver original
  1. DELETE FROM denuncias d
  2. WHERE d.ID_SECCION = 9
  3.     AND  d.ID_ELEMENTO IN  (SELECT c.ID FROM comentarios c WHERE c.ID_ELEMENTO = 20 AND c.ID_SECCION = 8);
¿Se nota la diferencia?

No la he probado, pero he copiado el ejemplo de un reporte de bug que habla del tema (DELETE doesn't support aliases)
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #11 (permalink)  
Antiguo 11/03/2011, 04:56
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: Delete sin select

Entiendo, muchas gracias, intentaré memorizar esto durante el mayor tiempo posible :D
Gracias por todo!

Etiquetas: delete, select
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:53.