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

Listar los campos de una tabla no relacionada

Estas en el tema de Listar los campos de una tabla no relacionada en el foro de Mysql en Foros del Web. Hola. Tengo el siguiente problema. En una base de datos de productos, tengo por una parte la tabla "familia" con los campos id_familia y nom_familia, ...
  #1 (permalink)  
Antiguo 15/09/2008, 02:42
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 2 meses
Puntos: 0
Listar los campos de una tabla no relacionada

Hola.

Tengo el siguiente problema.

En una base de datos de productos, tengo por una parte la tabla "familia" con los campos id_familia y nom_familia, por otra parte la tabla "artículos" con los campos referencia, familia_id, precio.

Quisiera saber qué consulta debo hacer para que me saliesen SOLO las familias que NO estén relacionadas con los artículos. Vamos, las familias que no estén usadas para poder borrarlas y no meter la pata y borrar una que esté usada por algún artículo.

Gracias
  #2 (permalink)  
Antiguo 15/09/2008, 03:17
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Listar los campos de una tabla no relacionada

Cita:
En una base de datos de productos, tengo por una parte la tabla "familia" con los campos id_familia y nom_familia, por otra parte la tabla "artículos" con los campos referencia, familia_id, precio.
Puedes hacerlo de estas dos maneras, según la versión de MysQL que utilices. Yo recomiendo siempre la primera, pero si utilizas MySQL 4.1 o posterior, podrás buscar con la segunda, según creo. De todas formas, piensa lo que vas a hacer. Que una familia no tenga un producto ahora, no quiere decir que no lo pueda tener más tarde.

SELECT f.id_familia, f.nom_familia FROM familia f LEFT JOIN artículos a ON f.id_familia = a.familia_id WHERE a.familia_id IS NULL

SELECT id_familia, nom_familia FROM familia WHERE id_familia NOT IN (SELECT familia_id FROM artículos)
  #3 (permalink)  
Antiguo 15/09/2008, 03:30
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Listar los campos de una tabla no relacionada

Muchas gracias.

Funciona perféctamente.

Lo de borrar familias; es un trabajo que le hago a un cliente, al no saber qué nivel tendrá el que vaya a usar el tema de gestionar la base de datos por web, no quiero que por error borre algo que no deba y me den luego la vara. Así si le da por borrar familias, que solo pueda borrar las que no estén usadas. Hay que anticiparse a los problemas que luego vienen todos de golpe.

Saludos

Por cierto al final me quedo con

SELECT * FROM familia WHERE id_familia NOT IN (SELECT familia_id FROM producto)
  #4 (permalink)  
Antiguo 15/09/2008, 07:19
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: Listar los campos de una tabla no relacionada

oswd,

antes comprueba qué motor estás usando, si InnoDB o MyIsam. La cosa es distinta en uno y otro caso. Con InnoDB y usando las especificaciones adecuadas, no se permitiría el borrado una familia que esté incluida en la otra tabla. Mira a ver qué es lo que tienes, y te ahorrarías todo esto.
En cuanto a la elección de la consulta, la decisión es tuya, pero en mi opinión, es preferible la primera por su mejor rendimiento, a pesar de que resulta más clara la segunda. No obstante, creo haber leído que el parseador de MySQL cuando se encuentra con la segunda consulta, realiza la primera (no estoy seguro de esto).

Suerte.

Última edición por jurena; 15/09/2008 a las 07:56
  #5 (permalink)  
Antiguo 15/09/2008, 14:09
 
Fecha de Ingreso: febrero-2005
Mensajes: 28
Antigüedad: 19 años, 2 meses
Puntos: 0
Respuesta: Listar los campos de una tabla no relacionada

Usa InnoDB, de todas formas 'familias' como mucho tendrá 20, no es una gran cantidad, no creo que tenga problemas con el rendimiento.

Probaré a ver el no usarlo a ver que pasa, de todas formas me han salido unos problemillas al borrar los datos y luego refrescar la página que estoy intentando solucionar.

Gracias por todo.

Saludos.
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 03:23.