Finalizar una Query
Publicado por willy (2 intervenciones) el 01/11/2017 11:09:14
Estoy finalizando una Query pero tengo problemas al tener una de las tablas (SIBLING) clave compuesta,pongo la estructura de las tablas para que todo se vea mas claro.
Se me pide una consulta que me saque la lista de niños(child) que han pedido un juguete que también pidiese su hermano(Sibling).Me piden su child_id,child_name y birth_date.
Tengo ya parte de la consulta echa que me saca los jueguetes que han pedido cada niño y su hermano
Esta query me saca el listado de los niños que son hermanos y los juegutes que han pedido,los hermanos son child_id (1,11) (6,10) (3,12) (8,13)
Por ejemplo se ve que el hermano 1 y 11 han pedido el mismo juguete 7 y 9...
Pues bien solo quiero sacar los hermanos que hayan pedido un mismo juguete y no sacar a los que no lo hicieran...¿Cómo puedo hacer esto?
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
42
43
44
45
46
47
48
49
50
51
52
53
**child**
CREATE TABLE CHILD(
child_id SMALLINT,
child_name VARCHAR(255) NOT NULL,
birth_date DATE NOT NULL,
gender VARCHAR(255) NOT NULL,
address VARCHAR(255),
city VARCHAR(255),
CONSTRAINT PK_CHILD PRIMARY KEY(child_id)
**Sibling**
CREATE TABLE SIBLING(
child_id1 SMALLINT,
child_id2 SMALLINT,
CONSTRAINT PK_SIBLING PRIMARY KEY(child_id1, child_id2),
CONSTRAINT CHILD1_FK FOREIGN KEY (child_id1) REFERENCES CHILD(child_id),
CONSTRAINT CHILD2_FK FOREIGN KEY (child_id2) REFERENCES CHILD(child_id)
);
**letter**
CREATE TABLE LETTER(
letter_id SMALLINT,
arrival_date DATE NOT NULL,
number_toys INTEGER NOT NULL,
delivery_mode VARCHAR(255) NOT NULL,
child_id SMALLINT,
CONSTRAINT PK_LETTER PRIMARY KEY(letter_id),
CONSTRAINT CHILD_FK FOREIGN KEY (child_id) REFERENCES CHILD(child_id)
);
**wished_toy**
CREATE TABLE WISHED_TOY(
letter_id SMALLINT,
toy_id SMALLINT,
CONSTRAINT PK_WISHED_TOY PRIMARY KEY(letter_id, toy_id),
CONSTRAINT LETTER_FK FOREIGN KEY (letter_id) REFERENCES LETTER(letter_id)
CONSTRAINT LETTER_FK FOREIGN KEY (toy_id) REFERENCES TOY(toy_id)
);
**toy**
CREATE TABLE TOY(
toy_id SMALLINT,
toy_name VARCHAR (255) NOT NULL,
price DECIMAL NOT NULL,
toy_type VARCHAR(255) NOT NULL,
manufacturer VARCHAR(255) NOT NULL,
CONSTRAINT PK_TOY PRIMARY KEY(toy_id),
);
Se me pide una consulta que me saque la lista de niños(child) que han pedido un juguete que también pidiese su hermano(Sibling).Me piden su child_id,child_name y birth_date.
Tengo ya parte de la consulta echa que me saca los jueguetes que han pedido cada niño y su hermano
1
2
3
4
5
6
SELECT ch.child_id,ch.child_name,ch.birth_date,wt.toy_id
FROM child ch
right outer join sibling si ON ch.child_id= SI.child_id1
left outer join letter l
on ch.child_id=l.child_id
left outer join wished_toy wt on l.letter_id=wt.letter_id
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
**RESULT OF THE QUERY**
1, 'Daniel' ,'2005-05-01' ,7
1, 'Daniel' ,'2005-05-01' ,5
1, 'Daniel' ,'2005-05-01' ,9
1, 'Daniel' ,'2005-05-01' ,4
1, 'Daniel' ,'2005-05-01' ,3
1, 'Daniel' ,'2005-05-01' ,1
11, 'Mireia' ,'2009-06-10' ,9
11, 'Mireia' ,'2009-06-10' ,7
11, 'Mireia' ,'2009-06-10' ,5
11, 'Mireia' ,'2009-06-10' ,4
11, 'Mireia' ,'2009-06-10' ,8
6, 'Elena' ,'2001-02-18' ,5
10, 'Guillermo','2003-12-21' ,1
10, 'Guillermo','2003-12-21' ,4
10, 'Guillermo','2003-12-21' ,9
3, 'Raquel' ,'2002-03-08' ,5
3, 'Raquel' ,'2002-03-08' ,2
12, 'Sergi' ,'2012-08-29' ,12
12, 'Sergi' ,'2012-08-29' ,7
12, 'Sergi' ,'2012-08-29' ,2
12, 'Sergi' ,'2012-08-29' ,5
8, 'Pedro' ,'2008-03-30' ,3
8, 'Pedro' ,'2008-03-30' ,4
8, 'Pedro' ,'2008-03-30' ,8
13, 'Sara' ,'2002-08-29', NULL
Por ejemplo se ve que el hermano 1 y 11 han pedido el mismo juguete 7 y 9...
Pues bien solo quiero sacar los hermanos que hayan pedido un mismo juguete y no sacar a los que no lo hicieran...¿Cómo puedo hacer esto?
Valora esta pregunta
0