2009-12-20 21 views
0

簡短的數據庫描述「船舶」:如何創建可以過濾計數的SQL查詢?

參與第二次世界大戰的海軍艦艇數據庫正在考慮之中。該數據庫具有以下關係:

  • 類(類,類型,國家,numGuns,缸徑,排量)
  • 船舶(姓名,班級,推出)
  • 戰役(名稱,日期)
  • 結果(船舶,戰鬥,結果)

船上的班級安排到一個單一的項目。一個班級通常被分配考慮中的班級中的第一艘船的名字(頭船);否則,班級名稱與數據庫中的任何船名不一致。

Classes關係包括班級名稱,類型(戰艦的bb或戰鬥巡洋艦的bc),建造船的國家,主炮數量,炮管口徑(槍管直徑,in英寸)和位移(重量以噸計)。

船舶關係包括船名,船級名稱和啓動年份。戰鬥關係涵蓋了船隻參與戰鬥的名稱和日期;而他們參與戰鬥的結果(沉沒,損壞或未受傷 - 確定)在結果關係中。注意:結果關係可能包括未包含在船舶關係中的船舶。

指出至少三艘來自同一國家的船參加的戰鬥。

有人可以幫助這個查詢嗎?我有一段時間沒有使用過SQL。

編輯

據我所知,它不能要求一個寬泛的問題,我會更具體:

我想過我怎麼能做到這一點,但最終我需要一些有幾種方式來重複計數? 爲exmaple..for列表

,如果我會說計數> 2,我會得到一個和C

名稱 一個 一個 b 一個 b 一個 ç Ç Ç

+2

你有一個失敗的嘗試?這個網站上的「政策」用於探究家庭作業的問題是要求具體問題。否則,您可能會被標記爲「plz-send-me-teh-codez」。 – 2009-12-20 18:16:55

+1

回車。列表。佈局。 – gbn 2009-12-20 19:15:21

回答

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

我不明白你的描述中的所有內容,但我們先從這個開始。這足夠接近了嗎?不太確定「... Outcomes relation may include the ships not included in the Ships relation」的含義。希望這會讓你開始。

ship_model_01

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