hola, tengo tres tablas
sacramento, saparticipante y persona, en la tabla saparticipante guardo todas las personas que participaron y como participo en ese sacramento (madre, abuelo paterno, padre, madrina, padrino, testigo, etc) en un sacramento, he tratado de sacar una consulta que me muestre por fila todos las personas que participaron en ese sacramento, hice una y me funciona pero no se si existe una forma de hacerlo mas practico con la utilizacion de JOIN's...
resalto que sé cuantas personas son por sacramento y la idea es sacar una consulta por sacramento, bautismo, confirmacion, matrimonio, defuncion.
la estructura de las tablas son las siguiente:
el campo IdPersonaTipo tiene el id de la tabla
saparticipantetipo que contiene el tipo de persona que es (madre, abuelo paterno, padre, madrina, padrino, celebrante, testigo, etc) en el sacramento y esta cargada con el siguiente contenido:
Código MySQL:
Ver originalIdTipo Tipo
1 Padre
2 Madre
3 Padre Esposo
4 Madre Esposo
5 Padre Esposa
6 Madre Esposa
7 Abuelo Padre
8 Abuela Padre
9 Abuelo Madre
10 Abuela Madre
11 Testigo 1
12 Testigo 2
13 Madrina
14 Padrino
15 Persona 1
16 Persona 2
KEY DptoNacimiento
(DptoNacimiento
)
la consulta que tengo es esta y le agradeceria mucho a la persona que logre como optimizar esta consulta..
muchas gracias:
Código MySQL:
Ver originalSELECT sp.IdPersona idp
, TRIM(CONCAT(p.ApellidoP
, ' ', p.ApellidoM
, ' ', p.Nombre
)) persona_
, idp1, padre, idp2, abuelo_paterno, idp3, abuela_paterna, idp4, madre, idp5, abuelo_materno, idp6, abuela_materna, idp7,
padrino, idp8, madrina
FROM persona p
INNER JOIN saparticipante sp
ON sp.IdPersona
=p.IdPersona
AND sp.IdSacramento
=2 AND sp.IdPersonaTipo
=15, #persona (SELECT sp1.IdPersona idp1
, TRIM(CONCAT(p1.ApellidoP
, ' ', p1.ApellidoM
, ' ', p1.Nombre
)) padre
FROM persona p1
INNER JOIN saparticipante sp1
ON sp1.IdPersona
=p1.IdPersona
AND sp1.IdSacramento
=2 AND sp1.IdPersonaTipo
=1) p_1
, #padre (SELECT sp2.IdPersona idp2
, TRIM(CONCAT(p2.ApellidoP
, ' ', p2.ApellidoM
, ' ', p2.Nombre
)) abuelo_paterno
FROM persona p2
INNER JOIN saparticipante sp2
ON sp2.IdPersona
=p2.IdPersona
AND sp2.IdSacramento
=2 AND sp2.IdPersonaTipo
=7) p_2
, #abuelo_paterno (SELECT sp3.IdPersona idp3
, TRIM(CONCAT(p3.ApellidoP
, ' ', p3.ApellidoM
, ' ', p3.Nombre
)) abuela_paterna
FROM persona p3
INNER JOIN saparticipante sp3
ON sp3.IdPersona
=p3.IdPersona
AND sp3.IdSacramento
=2 AND sp3.IdPersonaTipo
=8) p_3
, #abuela_paterna (SELECT sp4.IdPersona idp4
, TRIM(CONCAT(p4.ApellidoP
, ' ', p4.ApellidoM
, ' ', p4.Nombre
)) madre
FROM persona p4
INNER JOIN saparticipante sp4
ON sp4.IdPersona
=p4.IdPersona
AND sp4.IdSacramento
=2 AND sp4.IdPersonaTipo
=2) p_4
, #madre (SELECT sp5.IdPersona idp5
, TRIM(CONCAT(p5.ApellidoP
, ' ', p5.ApellidoM
, ' ', p5.Nombre
)) abuelo_materno
FROM persona p5
INNER JOIN saparticipante sp5
ON sp5.IdPersona
=p5.IdPersona
AND sp5.IdSacramento
=2 AND sp5.IdPersonaTipo
=9) p_5
, #abuelo_materno (SELECT sp6.IdPersona idp6
, TRIM(CONCAT(p6.ApellidoP
, ' ', p6.ApellidoM
, ' ', p6.Nombre
)) abuela_materna
FROM persona p6
INNER JOIN saparticipante sp6
ON sp6.IdPersona
=p6.IdPersona
AND sp6.IdSacramento
=2 AND sp6.IdPersonaTipo
=10) p_6
, #abuela_materna (SELECT sp7.IdPersona idp7
, TRIM(CONCAT(p7.ApellidoP
, ' ', p7.ApellidoM
, ' ', p7.Nombre
)) padrino
FROM persona p7
INNER JOIN saparticipante sp7
ON sp7.IdPersona
=p7.IdPersona
AND sp7.IdSacramento
=2 AND sp7.IdPersonaTipo
=14) p_7
, #padrino (SELECT sp8.IdPersona idp8
, TRIM(CONCAT(p8.ApellidoP
, ' ', p8.ApellidoM
, ' ', p8.Nombre
)) madrina
FROM persona p8
INNER JOIN saparticipante sp8
ON sp8.IdPersona
=p8.IdPersona
AND sp8.IdSacramento
=2 AND sp8.IdPersonaTipo
=13) p_8
#madrina
esta consulta me arroja todas las personas que participaron en un bautismo que corresponde al id=2