SELECT
p.parent_name,
c.child_name,
t.toy_name
FROM parent p
INNER JOIN child c
ON p.parent_id = c.parent_id
INNER JOIN child_toy ct
ON c.child_id = ct.child_id
INNER JOIN toy t
ON ct.toy_id = t.toy_id;
SELECT
p.parent_name,
c.child_name,
COUNT(t.toy_id)
FROM parent p
INNER JOIN child c
ON p.parent_id = c.parent_id
INNER JOIN child_toy ct
ON c.child_id = ct.child_id
INNER JOIN toy t
ON ct.toy_id = t.toy_id
GROUP BY p.parent_name, c.child_name
HAVING (COUNT(t.toy_id) > 3);
parent_name;child_name;count
Fred;Jimmy;4
所以,孩子吉米和父母弗雷德有 3 个以上的玩具。您可以尝试无穷无尽的组合!享受!
==============示例数据=============
父母:
INSERT INTO parent VALUES (1, 'Fred');
INSERT INTO parent VALUES (2, 'Mary');
INSERT INTO parent VALUES (3, 'Joe');
孩子:
INSERT INTO child VALUES (1, 1, 'Jimmy');
INSERT INTO child VALUES (2, 1, 'Gerry');
INSERT INTO child VALUES (3, 1, 'Billy');
INSERT INTO child VALUES (4, 2, 'Mick');
INSERT INTO child VALUES (5, 2, 'James');
INSERT INTO child VALUES (6, 2, 'Larry');
INSERT INTO child VALUES (7, 3, 'Jim');
INSERT INTO child VALUES (8, 3, 'Jack');
INSERT INTO child VALUES (9, 3, 'Helen');
玩具:
INSERT INTO toy VALUES (1, 'Action Man');
INSERT INTO toy VALUES (2, 'Barbie');
INSERT INTO toy VALUES (3, 'Monopoly');
INSERT INTO toy VALUES (4, 'Cluedo');
INSERT INTO toy VALUES (5, 'Hurley');
INSERT INTO toy VALUES (6, 'Soccer ball');
INSERT INTO toy VALUES (7, 'Rugby ball');
INSERT INTO toy VALUES (8, 'Tennis ball');
INSERT INTO toy VALUES (9, 'Tennis raquet');
INSERT INTO toy VALUES (10, 'Tricycle');
儿童玩具:
INSERT INTO child_toy VALUES(1, 2);
INSERT INTO child_toy VALUES(1, 3);
INSERT INTO child_toy VALUES(1, 4);
INSERT INTO child_toy VALUES(1, 5);
INSERT INTO child_toy VALUES(2, 3);
INSERT INTO child_toy VALUES(2, 9);
INSERT INTO child_toy VALUES(3, 1);
INSERT INTO child_toy VALUES(3, 2);
INSERT INTO child_toy VALUES(4, 6);
INSERT INTO child_toy VALUES(5, 7);
INSERT INTO child_toy VALUES(6, 9);
INSERT INTO child_toy VALUES(7, 3);
INSERT INTO child_toy VALUES(8, 4);
INSERT INTO child_toy VALUES(9, 5);
INSERT INTO child_toy VALUES(9, 6);
INSERT INTO child_toy VALUES(9, 7);
为了开始回答这个问题,我创建了 4 个表(请参阅帖子末尾的示例数据 - 或者更好的是,请参阅此处的小提琴):
最后一张表是一个“连接表”,它维护着另外两个表(在本例中为儿童和玩具)之间的 mn 连接。有很多孩子和很多玩具,孩子可以有不止一个玩具。
我把它留作练习以加入必要的
FOREIGN KEY
约束。您还可以使用 OracleSEQUENCE
而不是显式输入 ID。现在,此查询将为所有父母生成所有孩子的所有玩具。
结果:
您可以摆弄 fiddle(此处)并进行试验以提高您的 SQL 技能。
您可能需要为此输入更多示例数据。
这里有一个小提示:
所以,孩子吉米和父母弗雷德有 3 个以上的玩具。您可以尝试无穷无尽的组合!享受!
==============示例数据=============
父母:
孩子:
玩具:
儿童玩具:
您需要为您的问题添加更多细节;但总的来说,这只是使用一条
JOIN
语句将两个表连接到一个公共键列上的问题: