2015-05-16 85 views
2

我試圖解決運動#36是表頭船的數據庫名稱(考慮到結果表)SQL-EX.ru練習#36

頭一般是首先在線路該類船舶的名稱(即2個一般但1個構建之前另一個這樣的第一艘船是「頭船」)。我的結果表明我說過以下內容:

您的查詢在第一個(可用)數據庫上返回了正確的數據集,但它在第二個檢查數據庫上返回了不正確的數據集。 *錯誤的記錄數(1以下)

我的查詢如下:

SELECT A.name FROM Ships A 
WHERE A.name = A.class 
AND A.launched = (SELECT MIN(B.launched) FROM Ships B 
       WHERE A.name = B.name 
       AND A.class = B.class) 
UNION ALL 
SELECT A.ship 
FROM Outcomes A 
WHERE A.ship IN (SELECT C.ship FROM Outcomes C, Classes D 
       WHERE C.ship IN (SELECT ship FROM Outcomes) 
       AND C.ship NOT IN (SELECT name FROM Ships) 
       AND C.ship = D.class 
       ) 

數據庫的設置如下:

海軍艦艇在第二次世界大戰參加了該數據庫II正在考慮之中。

該數據庫具有以下關係:

Classes(class, type, country, numGuns, bore, displacement) 
Ships(name, class, launched) 
Battles(name, date) 
Outcomes(ship, battle, result) 

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

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

船舶關係包括船名,它的類名,並推出一年。

的戰鬥關係涵蓋的名稱和戰鬥艦艇參加日期;而他們參與戰鬥的結果(沉沒,損壞或未受傷 - 確定)在結果關係中。

注:

  1. 成果的關係可能包括不包括船舶關係的船隻。
  2. 沉船不能參加以後的戰鬥。

現在我的查詢返回正確的答案,但在聯合它沒有返回正確的值?我的理解是,船舶表中不存在其中一個船名,所以我從「成果」中選擇了它來解決問題。但即使這樣也是不正確的。有什麼我失蹤?

+0

你從來沒有說明練習要求你做什麼,所以我不知道查詢應該返回什麼。 –

+0

在該部分添加。沒有意識到我錯過了它 – Help123

回答

0

頭船都是具有相同的名稱,因爲它們屬於過於類船隻,我曾機智和它的工作:

WITH union1 (name) AS 
    (SELECT name FROM ships WHERE name = class 
    UNION SELECT ship AS name FROM outcomes 
    INNER JOIN classes ON classes.class = outcomes.ship) 
SELECT DISTINCT name FROM union1 
0

一個簡單的辦法:

select name from ships where name IN (select class from classes) 
UNION 
select ship from outcomes where ship IN (select class from classes) 
0
Select name from ships where name = class 
union 
select ship from outcomes join classes on outcomes.ship = classes.class