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

Consulta con subquery? left join? o esta mal la estructura?

Estas en el tema de Consulta con subquery? left join? o esta mal la estructura? en el foro de Mysql en Foros del Web. Buenas tengo las siguientes tablas socios (codigo, nombre) grupo_familiar(codgrupo, codigo, fechaalta, parentesco) adherente(codgrupo, codigo, parentesco) Bueno el tema es que necesito mostrar en un reporte ...
  #1 (permalink)  
Antiguo 21/11/2011, 07:39
mgd
 
Fecha de Ingreso: enero-2009
Mensajes: 129
Antigüedad: 15 años, 9 meses
Puntos: 0
Consulta con subquery? left join? o esta mal la estructura?

Buenas
tengo las siguientes tablas

socios (codigo, nombre)
grupo_familiar(codgrupo, codigo, fechaalta, parentesco)
adherente(codgrupo, codigo, parentesco)

Bueno el tema es que necesito mostrar en un reporte todos los socios y si es un socio adherente tener un campo que me indique el apellido del titular de ese grupo familiar.
guardo con la tabla grupo_familiar el campo codigo que es el codigo del socio titular y los demas integrantes estan en adherente donde tambien tengo codigo


El resultado que necesito es este:


Codigo Nombre Apellido Apellido Titular

0001 Daniel Moreno null
0002 Javier Tello null
0003 Oscar Videla Videla
0004 Jorge Videla Videla
0005 Maria Garcia Videla


Espero hacerme entender.

No pongo una consulta porque la verdad no pude crear nada que este cerca.

Tal vez este mal diseñado la estructura de la base de datos?
  #2 (permalink)  
Antiguo 21/11/2011, 08:04
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 8 meses
Puntos: 574
Respuesta: Consulta con subquery? left join? o esta mal la estructura?

Si la relacion entre socio titular y socios adherentes es de un solo nivel, es decir un titular tiene adheridos y estos no pueden tener adheridos a su vez (en otras palabras una relación padre-hijos sin nietos). Si es así lo puedes hacer mucho mas simple con una sola tabla de la siguiente manera....

socios
codigo PK
nombre
apellido
codigotitular FK (socios.codigo)
parentesco
fechaalta

donde codigotitular es un FK referida a codigo de la misma tabla. Codigotitular será nulo cuando el socio sea titular o tendrá el valor de codigo del socio tiutlar en el caso de los adheridos... parentesco tambien será nulo en los socios titulares y guardará la filiacion en los adheridos...

Código MySQL:
Ver original
  1. SELECT s.codigo,
  2.              s.nombre,
  3.              s.apellido,
  4.              s.fechaalta,
  5.              s.parentesco,
  6.              t.apellido,
  7.              t.fechaalta
  8. FROM socios as s
  9.        LEFT JOIN socios as t
  10.            ON s.codigotitular=t.codigo;

Esta consulta te da el nombre, apellido del socio, sea o no titular, su fecha de alta y en caso de no ser titular la relacion familiar, el apellido del titular y la fecha de alta del titular....

Si un socio adherido puede a su vez ser titular teniendo el adheridos todo se complica y esta solución no sirve....padre-hijos-nietos-...

Para obtener una lista de grupos familiares solo tienes que hacer

Código MySQL:
Ver original
  1. SELECT apellido
  2. FROM socios
  3. WHERE codigotitular IS NULL;

Tambien se puede conseguir el numero de integrantes de cada grupo pero te lo dejo para que lo pienses....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 21/11/2011 a las 08:30

Etiquetas: join, left, subquery, 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




La zona horaria es GMT -6. Ahora son las 13:54.