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

DELETE en Multitablas asociadas

Estas en el tema de DELETE en Multitablas asociadas en el foro de Mysql en Foros del Web. Hola gente del foro, tengo una sentencia que no puedo hacer andar y espero que puedan ayudarme a encontrar el error. la sentencia es esta: ...
  #1 (permalink)  
Antiguo 09/08/2012, 10:29
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Pregunta DELETE en Multitablas asociadas

Hola gente del foro, tengo una sentencia que no puedo hacer andar y espero que puedan ayudarme a encontrar el error.

la sentencia es esta:

Código MySQL:
Ver original
  1. pedidos_general AS PG , pedidos_datos AS PD , pedidos_info AS PI
  2. PG.Fecha<'20120101'
  3. AND PG.ID=PD.ID
  4. AND PG.ID=PI.ID

Cuando la ejecuto me da error de sintaxis en linea 2, probe todas las variantes que se me ocurrieron, todo lo que encontre en: http://dev.mysql.com/doc/refman/5.0/es/delete.html
con USING y nada : , el error es siempre el mismo, los nombres de las tablas estan bien escritos.

Lei temas ene ste foro parecidos pero tampoco pude solucionarlo.

Alguien se le ocurre como arreglarla?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #2 (permalink)  
Antiguo 09/08/2012, 10:53
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 en Multitablas asociadas

Por lo pronto, estás usando una palabra reservada como nombre de alias (PI() es una función).
Fijate el resaltado del código en tu post y lo verás.
Corrige eso, prueba de nuevo y veremos que otra cosa más puede ser.
__________________
¿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 09/08/2012, 11:08
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: DELETE en Multitablas asociadas

hola gnzsoloyo, tienes razon, me di cuenta justo despues de publicar de ese error sin embargo no cambia nada:

Código MySQL:
Ver original
  1. pedidos_general AS PG , pedidos_datos AS PD , pedidos_info AS PII
  2. PG.Fecha<'20120101'
  3. AND PG.ID=PD.ID
  4. AND PG.ID=PII.ID

error:

Cita:
#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 'AS PG , pedidos_datos AS PD , pedidos_info AS PII WHERE PG.Fecha<'20120101' ' at line 2
es como si no le gustara el AS pero probe a sacarselo es decir:

Código MySQL:
Ver original
  1. pedidos_general PG , pedidos_datos PD , pedidos_info PII
  2. PG.Fecha<'20120101'
  3. AND PG.ID=PD.ID
  4. AND PG.ID=PII.ID

y el error es el mismo
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #4 (permalink)  
Antiguo 09/08/2012, 11:12
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: DELETE en Multitablas asociadas

tambien probe a eliminar los alias:

Código MySQL:
Ver original
  1. pedidos_general , pedidos_datos , pedidos_info
  2. WHERE pedidos_general.Fecha<'20120101'
  3. AND pedidos_datos.ID=pedidos_general.ID
  4. AND pedidos_info.ID=pedidos_general.ID

y el error ahora es:

Cita:
#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 'WHERE pedidos_general.Fecha<'20120101' AND pedidos_datos.ID=pedidos_general.ID' at line 3

EDITO: uso mysql 5.5
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #5 (permalink)  
Antiguo 09/08/2012, 12:02
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 en Multitablas asociadas

Código MySQL:
Ver original
  1. DELETE pedidos_general AS PG , pedidos_datos AS PD , pedidos_info AS PII
  2. WHERE PG.Fecha<'20120101' AND PG.ID=PD.ID AND PG.ID=PII.ID
Si te fijas en el link del manual que pusiste, para usar FROM tienes que usar una doble declaración de tablas.
__________________
¿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 09/08/2012, 12:09
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: DELETE en Multitablas asociadas

Código MySQL:
Ver original
  1. DELETE pedidos_general AS PG , pedidos_datos AS PD , pedidos_info AS PII
  2. WHERE PG.Fecha<'20120101' AND PG.ID=PD.ID AND PG.ID=PII.ID

ese codigo tambien me da error.

y usando una doble declaracion:

Código MySQL:
Ver original
  1. pedidos_general AS PG, pedidos_datos AS PD, pedidos_info AS PII
  2. FROM PG, PD, PII
  3. WHERE PG.Fecha < '20120101'
  4. AND PD.ID = PG.ID
  5. AND PII.ID = PG.ID

tengo nuevamente el mismo error

Cita:
#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 'AS PG, pedidos_datos AS PD, pedidos_info AS PII FROM PG, PD, PII WHERE PG.Fe' at line 2
que molesto que una sentencia tan simple de tantos problemas...
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #7 (permalink)  
Antiguo 09/08/2012, 14:06
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 en Multitablas asociadas

Probemos:
Código MySQL:
Ver original
  1. DELETE pg, pd, pii
  2. FROM pedidos_general pg, pedidos_datos pd, pedidos_info pii
  3. PG.Fecha<'20120101' AND PG.ID=PD.ID AND PG.ID=PII.ID
Personalmente prefiero FK con ON DELETE CASCADE para este tipo de borrados.
__________________
¿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 10/08/2012, 10:44
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: DELETE en Multitablas asociadas

Muchas gracias gnzsoloyo ese codigo si funciona.

Cita:
Personalmente prefiero FK con ON DELETE CASCADE para este tipo de borrados.
estube leyendo los manuales de mysql para estos metodos antes de intentar hacerlo como ahora y sinseramente no entendi su funcionamiento. hise un par de pruebas pero como no me queda claro sin duda las estoy escribiendo muy mal.

podrias darme algun ejemplito de como funciona? es decir como puedo resolver mi problema con esas herramientas y si no es mucha molestia que me expliques brevemente que es lo que hace cada parte de la sentencia.

PD: Ya lei la documentacion oficial y no la entendi muy bien.

muchas gracias por tu ayuda!
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #9 (permalink)  
Antiguo 11/08/2012, 07:33
Avatar de gerardo_goh  
Fecha de Ingreso: noviembre-2008
Mensajes: 107
Antigüedad: 16 años, 1 mes
Puntos: 1
Respuesta: DELETE en Multitablas asociadas

que tal mi estimados por que no ponen datos para realizar el ejercicio y poder entender mejor el problema y poder dar una solución, muchas gracias, Saludos!!!
  #10 (permalink)  
Antiguo 11/08/2012, 09:26
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 en Multitablas asociadas

Cita:
Iniciado por NSD Ver Mensaje
Muchas gracias gnzsoloyo ese codigo si funciona.



estube leyendo los manuales de mysql para estos metodos antes de intentar hacerlo como ahora y sinseramente no entendi su funcionamiento. hise un par de pruebas pero como no me queda claro sin duda las estoy escribiendo muy mal.

podrias darme algun ejemplito de como funciona? es decir como puedo resolver mi problema con esas herramientas y si no es mucha molestia que me expliques brevemente que es lo que hace cada parte de la sentencia.

PD: Ya lei la documentacion oficial y no la entendi muy bien.

muchas gracias por tu ayuda!
La idea del ON DELETE CASCADE y ON UPDATE CASCADE es que cuanquier modificación de tipo actualización o borrado de las tablas base (donde ese valor es PK), se propague a las tablas donde es FK sin necesidad de realizarlo manualmente.
Lo que tienes que tener en cuenta es que:
1) Para que la cascada se produzca lo que debe borrarse en la tabla origen, donde esa clave es PK.
2) Los registros de las tablas dependientes (donde es FK) no deben ser a su vez FK en terceras tablas, a menos que también tengan operaciones en cascada.
3) Todas y cada una de las veces que esa PK sea FK en una tabla deben tener definida la cascada, o de lo contrario no se realizará ningún borrado en ninguna.

Este esquema es funcional cuando las dependencias son pocas, y muy útil en casos como los de Facturas<-DetalleFacturas, por ejemplo.
Pero donde la estructura de dependencias es compleja y/o posee muchas y múltiples dependencias, es difícil de implementar. No porque no se peuda, sino que hay que diseñarlo correctamente.
La ventaja es que eliminar la información de toda la cadena de tablas se obtiene con un único DELETE a una sola tabla.
__________________
¿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/08/2012, 09:27
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 en Multitablas asociadas

Cita:
Iniciado por gerardo_goh Ver Mensaje
que tal mi estimados por que no ponen datos para realizar el ejercicio y poder entender mejor el problema y poder dar una solución, muchas gracias, Saludos!!!
Porque has llegado tarde al tema, y a la solución... y además porque la información aportada era adecuada y suficiente para lograr una solución adecuada.
Mejor suerte para la próxima.

PD: Trata de fijarte siempre si se ha llegado al cierre del problema. Cuando hay muchos posts es muy probable que ya la cosa esté terminada.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 11/08/2012, 10:06
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: DELETE en Multitablas asociadas

Cita:
1) Para que la cascada se produzca lo que debe borrarse en la tabla origen, donde esa clave es PK.
2) Los registros de las tablas dependientes (donde es FK) no deben ser a su vez FK en terceras tablas, a menos que también tengan operaciones en cascada.
3) Todas y cada una de las veces que esa PK sea FK en una tabla deben tener definida la cascada, o de lo contrario no se realizará ningún borrado en ninguna.
es decir que tendria que alterar la estructura de mis tablas?

actualmente el id de Pedidos_General es una clave primaria autoincrement, en Pedidos_Datos ID es una indice unico, y en Pedidos_Info es un indice comun.

tendria que crear una FK en los dos ID que borraria en cascada? asi se ejecutaria automaticamente...

aparte de eso, mi motor es myisam y por lo que lei y tengo "entendido" las cascadas solo funcionan en INNODB es eso correcto?
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios
  #13 (permalink)  
Antiguo 11/08/2012, 11:08
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 en Multitablas asociadas

Cita:
es decir que tendria que alterar la estructura de mis tablas?
Sólo te digo las reglas mínimas que deben cumplirse.
No puedo decirte si modificar o no tu modelo de datos sin ver un diagrama completo de tu base de datos, con todas las relaciones y dependencias bien definidas.
Y hablo de diagrama, no de descripciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #14 (permalink)  
Antiguo 11/08/2012, 12:34
Avatar de NSD
NSD
Colaborador
 
Fecha de Ingreso: mayo-2012
Ubicación: Somewhere
Mensajes: 1.332
Antigüedad: 12 años, 7 meses
Puntos: 320
Respuesta: DELETE en Multitablas asociadas



ese es mi diagrama, hay mas tablas pero no influyen para nada en esta operacion de borrado que quiero hacer, la relacion con pedidos_datos es de 1 a 1 y hacia pedidos_info de 1 a n.

que me recomiendas?

edito: a la imagen abrela en otra pestaña con el boton derecho porque sino no la muestra nose por que.
__________________
Maratón de desafíos PHP Junio - Agosto 2015 en FDW | Reglamento - Desafios

Etiquetas: delete, sql, tabla
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 00:45.