PostgreSQL - Finalizar una Query

   
Vista:

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.



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
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)



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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder