简短的数据库描述“Ships”:
正在考虑参加第二次世界大战的海军舰艇数据库。该数据库具有以下关系:
课程中的船舶安排在一个项目中。通常会为一类人员分配正在考虑的类别中的第一艘船的名称(船头);否则,类名与数据库中的任何船名不一致。
Classes关系包括班级名称,类型(战斗舰的bb或战斗巡洋舰的bc),建造船舶的国家,主炮数量,枪口径(枪管直径,英寸) )和排水量(重量以吨计)。
船舶关系包括船名,类名和发射年份。战斗关系包括船舶参与战斗的名称和日期;而他们参与战斗的结果(沉没,受损或无伤害 - 好的)是在结果关系中。注意:结果关系可能包括未包含在船舶关系中的船舶。
指出来自同一国家的至少三艘船参加的战斗。
有人可以帮助解决这个问题吗?我已经有一段时间没用SQL了。
修改
正如我被告知不允许提出一个广泛的问题,我会更具体:
我想过如何做到这一点,但最终我需要某种方式来计算重复数据? 为exmaple ..列表
如果我说算数> 2我会得到一个和c
名称 一个 一个 b 一个 b 一个 C C ç
答案 0 :(得分:1)
试试这个
SELECT *
FROM Battles b
WHERE EXISTS (
SELECT NULL
FROM Outcomes o
INNER JOIN Ships s
ON o.ship = s.name
INNER JOIN Classes c
ON s.class = c.class
WHERE o.battle = b.name
GROUP BY c.country
HAVING count(*) >= 3
)
答案 1 :(得分:0)
我不理解你的描述中的所有内容,但让我们从这开始。这够近了吗?不太确定“... Outcomes relation may include the ships not included in the Ships relation
”是什么意思。希望这能让你开始。
SELECT DISTINCT b.[Name] AS [Battle Name]
FROM Class AS c
JOIN Ship AS s ON s.ClassID = c.ClassID
JOIN Outcome AS o ON o.ShipID = s.ShipID
JOIN Battle AS b ON b.BattleID = o.BattleID
GROUP BY b.[Name], c.Country
HAVING COUNT(c.Country) >= 3