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

Se les ocurre una mejor forma de hacer estos LEFT JOIN?

Estas en el tema de Se les ocurre una mejor forma de hacer estos LEFT JOIN? en el foro de Mysql en Foros del Web. Hola, pues tal como se oye, se les ocurre una mejor forma de hacer estos left JOIN: Código: "DELETE prod_cat.*, prod_color.*, prod_oz.*, prod_size.* FROM productos ...
  #1 (permalink)  
Antiguo 06/02/2009, 00:55
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Se les ocurre una mejor forma de hacer estos LEFT JOIN?

Hola, pues tal como se oye, se les ocurre una mejor forma de hacer estos left JOIN:

Código:
"DELETE prod_cat.*, prod_color.*, prod_oz.*, prod_size.* FROM productos LEFT JOIN prod_cat Using (id_producto) LEFT JOIN prod_color Using (id_producto) LEFT JOIN prod_oz Using (id_producto) LEFT JOIN prod_size USING (id_producto) WHERE productos.id_producto = $prod";
Lo que tengo que hacer es borrar los valores de unas lookup tables basado en un valor, por ejemplo borrar todos los registros de cada lookup table en donde el valor de la columna id_producto sea igual a 1. El problema es que hay lookup tables en los que la columna id_producto no tiene dicho valor, por eso uso el LEFT JOIN en lugar de un INNER JOIN.

Saludos.
__________________
twitter: @imbuzu
  #2 (permalink)  
Antiguo 06/02/2009, 07:44
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Se les ocurre una mejor forma de hacer estos LEFT JOIN?

Código:
DELETE prod_cat.*, 
             prod_color.*, 
             prod_oz.*, 
             prod_size.* 
     FROM productos LEFT JOIN prod_cat Using (id_producto) 
                                LEFT JOIN prod_color Using (id_producto) 
                                LEFT JOIN prod_oz Using (id_producto) 
                                LEFT JOIN prod_size USING (id_producto) 
WHERE productos.id_producto = $prod";
Código:
DELETE FROM  prod_cat WHERE prod_cat.id_producto = $prod";
etc.

Si por separado o definiendo en la relacion la eliminacion en cascada, si puedes eliminar de productos.

Código:
DELETE FROM  productos WHERE productos.id_producto = $prod";
Si tienes definidas las FK y la eliminación en cascada solo tines que eliminar el producto de la tabla principal (productos) y se eliminara de las demás.


Cita:
El problema es que hay lookup tables en los que la columna id_producto no tiene dicho valor, por eso uso el LEFT JOIN en lugar de un INNER JOIN.
Si alguna de las tablas no tiene el campo id_producto dificilmente se te van a relacionar, sea con LEFT JOIN o INNER JOIN. Si lo que no tienen es el valor no te importa puesto que luego no tendrás que borrar nada en ellas.

Quim
  #3 (permalink)  
Antiguo 06/02/2009, 12:28
Avatar de buzu  
Fecha de Ingreso: octubre-2006
Ubicación: San Francisco, CA
Mensajes: 2.168
Antigüedad: 17 años, 6 meses
Puntos: 122
Respuesta: Se les ocurre una mejor forma de hacer estos LEFT JOIN?

Hola, gracias por responder. Tal como lo tengo funciona bien, solo queria ver si se les ocurria una mejor forma de hacerlo. Todas las tablas tienen el campo id_producto, de otra manera usaria ON en lugar de USING. La razón por la que no uso INNER JOIN es por que si una de las tablas no contiene un valor en id_producto que sea igual a $prod Mysql no borra ninguna de las otras tablas que si lo tienen.

Cita:
Si tienes definidas las FK y la eliminación en cascada solo tines que eliminar el producto de la tabla principal (productos) y se eliminara de las demás.
En realidad creo que no se como hacer eso de la eliminación en cascada, pero igual no me funcionaría por que no quiero eliminar los productos, solo los valores en las lookup tables que correspondan a determinado producto.

Saludos y Gracisa por responder....
__________________
twitter: @imbuzu
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 19:18.