我一直在研究這個查詢幾次,我設法找到一個解決方案,但在練習解決方案本身,它說我得到了正確數量的結果,但不匹配。sql dml練習19
這是他們提出的練習:
假設沒有任何兩個戰鬥是在同一天,沉船在接下來的戰鬥艦艇,這在他們的第一個戰鬥中受損,無處參加。如果數據庫中沒有關於該船的後續戰鬥,請不要將該船插入「成果」表中。
您的查詢返回的第一個(有) 數據庫上正確的數據集,但它返回的第二檢查 數據庫上不正確的數據集。 *數據不匹配(162)
這是我寫的查詢:
insert into outcomes
select
ship, b.name, 'sunk' from
(select ship, name, date from outcomes o
inner join battles bv
on o.battle = bv.name
where result = 'damaged'
and date = (select max(date)
from outcomes os
inner join battles ba
on os.battle = ba.name
where os.ship = o.ship)
) aq cross join battles b
where b.date = (select min(date) from battles where date > aq.date)
這是數據庫描述:
,在參加海軍艦艇數據庫第二次世界大戰正在考慮之中。該數據庫具有以下關係:
- 類(類,類型,國家,numGuns,缸徑,排量)
- 船舶(姓名,班級,推出)
- 戰役(名稱,日期)
- 結果(船舶,戰鬥,結果)
船上的班級安排到一個單一的項目。一個班級通常被分配考慮中的班級中的第一艘船的名字(頭船);否則,班級名稱與數據庫中的任何船名不一致。 Classes關係包括班級名稱,類型(戰鬥艦的bb或戰鬥巡洋艦的bc),建造船的國家,主炮的數量,炮管口徑(槍管的直徑,以英寸爲單位)以及排水量(以噸計)。船舶關係包括船名,船級名稱和發射年份。戰鬥關係涵蓋船隻參與戰鬥的名稱和日期;而他們參與戰鬥的結果(沉沒,損壞或未受傷 - 確定)在結果關係中。
注:
- 成果的關係可能包括不包括船舶關係的船隻。
- 此後沉沒的船隻不能參與戰鬥。
這裏是表關係http://sql-ex.ru/help/select13.php#db_3
除其他外,你應該改變問題的名稱,以便更清楚其他你在問什麼。 –
我不知道這是否只是我,但我不明白重要的粗體部分。有什麼機會可以修正這個語言? – sstan
- 同一天內沒有兩場戰鬥 - 如果船舶受損並且不在以後的戰鬥中,則將其插入結果表中,並在下一次戰鬥中將結果「沉沒」。 - 如果下一場戰鬥不在數據庫中,則不插入 –