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

Ayuda con consulta DELETE

Estas en el tema de Ayuda con consulta DELETE en el foro de Bases de Datos General en Foros del Web. Hola chicos... aki de nuevo con un problemita de sintaxis... resulta que tengo la tabla REPORTE (*folio, fecha, unidad,.....etc) y la tabla DETALLE_REPORTE (-folio, hora, ...
  #1 (permalink)  
Antiguo 14/12/2010, 20:31
 
Fecha de Ingreso: agosto-2010
Mensajes: 147
Antigüedad: 13 años, 8 meses
Puntos: 1
Pregunta Ayuda con consulta DELETE

Hola chicos... aki de nuevo con un problemita de sintaxis... resulta que tengo la tabla REPORTE (*folio, fecha, unidad,.....etc) y la tabla DETALLE_REPORTE (-folio, hora, fecha, actividades)

quiero eliminar un reporte de la tabla REPORTE seleccionando el folio, pero obvio como existe otra tabla que tiene ese valor ps no se como quedaría la consulta...


espero verme explicado.... lo siguiente es lo unico que hice pero obvio no me elimina....

DELETE FROM reporte WHERE reporte.folio=1;
__________________
ѕiεмpяε εѕтoy ѕoñαиdo *εи iиviεrиo coи εℓ ѕoℓ, coи ℓαѕ иubεѕ εи vεrαиo*
***DiαиiтHα***
  #2 (permalink)  
Antiguo 14/12/2010, 22:38
 
Fecha de Ingreso: noviembre-2002
Ubicación: DF
Mensajes: 1.056
Antigüedad: 21 años, 5 meses
Puntos: 37
Respuesta: Ayuda con consulta DELETE

tienes que borrar primero la tabla dependiente, esto es, DETALLE_REPORTE (si tienes integridad referencial activada, entonces el cabecero no permite el borrado x que existen los registros en DETALLE).

Luego ejecutas el DELETE sobre la tabla REPORTE.

Saludos
Juan Arturo
  #3 (permalink)  
Antiguo 15/12/2010, 03:28
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta DELETE

Una opción es:
Código MySQL:
Ver original
  1. DELETE FROM REPORTE R INNER JOIN DETALLE_REPORTE D ON R.folio = D.folio
  2. WHERE R.folio = valorFolio
Otra opción es, si tienes tablas InnoDB, usar folio en la tabla detalle_reporte como FK con la cláusula ON DELETE CASCADE... De esa forma simplemente borras en REPORTE y en DETALLE_REPORTE se borran solas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 15/12/2010, 09:57
 
Fecha de Ingreso: agosto-2010
Mensajes: 147
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Ayuda con consulta DELETE

gracias chicos....

oie gnzsoloyo la consulta q me das no me borra me marca el sig. error:::

#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 'R INNER JOIN DETALLE_REPORTE D ON R.folio = D.folio WHERE R.folio = 3' at line 1

asi es como tengo la tabla detalle_reporte

Estructura de tabla para la tabla `detalle_reporte`
--

CREATE TABLE IF NOT EXISTS `detalle_reporte` (
`folio` int(5) NOT NULL,
`fecha` date NOT NULL,
`hora` time NOT NULL,
`no_inter` int(5) NOT NULL,
`activ_report` varchar(300) NOT NULL,
KEY `folio` (`folio`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
__________________
ѕiεмpяε εѕтoy ѕoñαиdo *εи iиviεrиo coи εℓ ѕoℓ, coи ℓαѕ иubεѕ εи vεrαиo*
***DiαиiтHα***
  #5 (permalink)  
Antiguo 15/12/2010, 11:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta DELETE

Para que funcione el borrado en cascada la tabla debería tener esta definicion:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `detalle_reporte` (
  2. `folio` int(5) NOT NULL,
  3. `fecha` date NOT NULL,
  4. `hora` time NOT NULL,
  5. `no_inter` int(5) NOT NULL,
  6. `activ_report` varchar(300) NOT NULL,
  7. KEY `folio` (`folio`)
  8. CONSTRAINT `FK_detalle_reporte_folio` FOREIGN KEY (`folio`) REFERENCES `reporte` (`folio`)

En cuanto al error, la sentencia se supone que está bien escrita, conforme dice el manual de referencia, pero podemos hacer:

Código MySQL:
Ver original
  1. DELETE REPORTE, DETALLE_REPORTE
  2. FROM REPORTE R, DETALLE_REPORTE D
  3. WHERE R.folio = D.folio AND R.folio = valorFolio

de las dos opciones, la primera sigue siendo la más eficiente.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 15/12/2010, 12:29
 
Fecha de Ingreso: agosto-2010
Mensajes: 147
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Ayuda con consulta DELETE

disculpa las molestias lo que pasa es que creo la tabla con el codigo que me proporcionas pero me marca el siguiente error::::

#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 'CONSTRAINT `FK_detalle_reporte_folio` FOREIGN KEY (`folio`) REFERENCES `reporte`' at line 8
__________________
ѕiεмpяε εѕтoy ѕoñαиdo *εи iиviεrиo coи εℓ ѕoℓ, coи ℓαѕ иubεѕ εи vεrαиo*
***DiαиiтHα***
  #7 (permalink)  
Antiguo 15/12/2010, 13:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta DELETE

¿Qué versión de MySQL estás usando?

Una duda: ¿Nunca te pones tu mismo a revisar los errores de los códigos que copias, luego de recibir el mensaje de MySQL?
Hubieses notado perfectamente el problema:
Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `detalle_reporte` (
  2. `folio` INT(5) NOT NULL,
  3. `fecha` DATE NOT NULL,
  4. `hora` TIME NOT NULL,
  5. `no_inter` INT(5) NOT NULL,
  6. `activ_report` VARCHAR(300) NOT NULL,
  7. KEY `folio` (`folio`),
  8. CONSTRAINT `FK_detalle_reporte_folio` FOREIGN KEY (`folio`) REFERENCES `reporte` (`folio`)
Has cosas que deberías intentar hacer por ti mismo...
__________________
¿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 16/12/2010, 20:35
 
Fecha de Ingreso: agosto-2010
Mensajes: 147
Antigüedad: 13 años, 8 meses
Puntos: 1
Respuesta: Ayuda con consulta DELETE

Hola gnzsoloyo tienes razón, se que aveces suelo ser eso... copiar y pegar sin analizar.... pero la vdd me siento un poco tensa y frustrada y ps no me detuve a observar con detalle el código... de antemano muchísimas gracias y perdona mi imprudencia....Dios t bendiga...

aun asi me marca este error cuando quiero eliminar...

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 'R INNER JOIN
DETALLE_REPORTE D ON R.folio = D.folio WHERE R.folio = 3' at line 1

uso WANSERVER con MYSQL V. 5.1.36
__________________
ѕiεмpяε εѕтoy ѕoñαиdo *εи iиviεrиo coи εℓ ѕoℓ, coи ℓαѕ иubεѕ εи vεrαиo*
***DiαиiтHα***
  #9 (permalink)  
Antiguo 17/12/2010, 05:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Ayuda con consulta DELETE

Cita:
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 'R INNER JOIN
DETALLE_REPORTE D ON R.folio = D.folio WHERE R.folio = 3' at line 1
No me queda muy claro por qué se produce el error (no debería suceder), para poder clarificarlo necesitaría que postearas la sentencia completa, tal y como la estás escribiendo, cuando se produce un error.
Normalmente el parser lo que te devuelve como segmento de la sentencia es lo último que logró comprender, pero no necesariamente el punto donde está el error (por eso dice "near" y "in"). El error puede estar una, dos o diez líneas más arriba sin ningún problema. He tenido casos, en stored procedures, donde el error estaba más de cincuenta líneas arriba del corte (subconsultas muúltiples).

Postea el ejemplo usado completo y veremos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

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 08:14.