我正在完成一个查询,但我无法完成它,表的结构如下:
孩子
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)
同级
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)
);
字母
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)
);
玩具
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),
);
他们要求我提出一个查询,其中包含要求他们的兄弟(兄弟姐妹)要求玩具的儿童名单。具体来说,子项的标识符是必需的child_id,名称为child_name,其出生日期为birth_date。
我已经有了这部分查询,但有些事情让我失望,我不知道如何比较每个孩子要求的玩具......
SELECT ch.child_id,ch.child_name,ch.birth_date,wi.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
这个查询给我回复了每个有兄弟和他哥哥要求的孩子的玩具。 我的问题是如何获得重复玩具的清单,我的意思是两兄弟问过。 兄弟夫妇是 child_id(1,11)(6,10)(3,12)(8,13)
查询的结果
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
例如,可以看到兄弟1和11订购了相同的玩具,玩具9和7。 例如,我怎样才能得到它们中的两个?
答案 0 :(得分:0)
BinarySearchTree
当单个孩子有多个字母时,distinct是必要的,以防止重复的结果。身份证