MySQL - Duda sobre consultas

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 96 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Duda sobre consultas

Publicado por Benjamin (1 intervención) el 28/04/2020 18:52:11
Buenas a todos,

estoy intentando hacer una consulta en la que aparezcan un grupo de personas con sus nombres,el de sus padres y el telefono de cada uno, seria así:

tabla1_nombre | tabla1_apellido1 | tabla1_apellido2 | tabla2_padre | tabla2_madre

Antonio-------------Ramirez----------------Froilan--------------Rodrigo---------Amparo

En vez de eso me sale en dos filas,como es normal, o si consigo hacerlo como quiero solo salen uno o dos resultados y no todos los miembros del grupo.

Les dejo el codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
CREATE TABLE adultos (
	adu_dni				CHAR(9)NOT NULL,
	adu_nombre			VARCHAR(50) NOT NULL,
	adu_apellido1		VARCHAR(25) NOT NULL,
	adu_apellido2		VARCHAR(25),
	adu_tel1			CHAR(9) DEFAULT NULL,
	adu_tel2			CHAR(9) DEFAULT NULL,
 
	PRIMARY KEY (adu_dni)
)ENGINE=INNODB;
 
CREATE TABLE grupo (
	gru_cod 			INT(2)NOT NULL,
 
	PRIMARY KEY (gru_cod)
)ENGINE=INNODB;
 
CREATE TABLE cateq (
	cat_id					INT(9)NOT NULL AUTO_INCREMENT,
	cat_dni					CHAR(9)NOT NULL,
	cat_nombre				VARCHAR(50) NOT NULL,
	cat_apellido1			VARCHAR(25) NOT NULL,
	cat_apellido2			VARCHAR(25) NOT NULL,
	cat_grupo				INT(2) NOT NULL,
 
 
	PRIMARY KEY (cat_id),
 
	FOREIGN KEY (cat_grupo) REFERENCES grupo(gru_cod) ON DELETE SET NULL ON UPDATE CASCADE
)ENGINE=INNODB;
 
CREATE TABLE padres (
	pad_id				INT(9)NOT NULL AUTO_INCREMENT,
	pad_adulto			CHAR(9)NOT NULL,
	pad_cateq		INT(9)NOT NULL,
 
	PRIMARY KEY (pad_id),
 
	FOREIGN KEY (pad_adulto) REFERENCES adultos(adu_dni),
	FOREIGN KEY (pad_cateq) REFERENCES cateq(cat_id)
)ENGINE=INNODB;

Esta son las consultas que hago, la primera sale todo el grupo pero el nombre de los padres se repite y la segunda sale bien pero sin el resto del grupo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SELECT cat_nombre AS nombre, cat_apellido1 AS primer_apellido, cat_apellido2 AS segundo_apellido, adultos.adu_nombre AS adulto, a1.adu_nombre, adultos.adu_tel1 as telefono,cat_grupo as codigo
FROM cateq
JOIN grupo ON cateq.cat_grupo = grupo.gru_cod
LEFT JOIN padres ON cateq.cat_id = padres.pad_cateq
LEFT JOIN adultos ON adultos.adu_dni = padres.pad_adulto
LEFT JOIN adultos as a1 ON a1.adu_dni = padres.pad_adulto
LEFT JOIN servicio ON cateq.cat_servicio = servicio.ser_id
where cat_grupo=1;
 
SELECT distinct cat_nombre AS nombre, cat_apellido1 AS primer_apellido, cat_apellido2 AS segundo_apellido, cateq.cat_grupo, a1.adu_nombre, a1.adu_tel1, a2.adu_nombre, a2.adu_tel1
FROM cateq,adultos as a1, adultos as a2,padres,grupo
WHERE cat_id=pad_cateq AND a1.adu_dni=pad_adulto AND cat_grupo=gru_cod AND a2.adu_nombre =ANY (
select a2.adu_nombre
from adultos as a2,padres
where a2.adu_dni=pad_adulto )
group by cat_nombre
HAVING COUNT(cat_nombre)>=1;

Seguro que es algo que no termino de ver o estoy equivocado en algo. Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder