我的解决方案有错误吗?
任务是
定义“在未来的战斗中幸存下来”的船只;在一场战斗中受伤,他们又参加了另一场战斗。
数据库描述
参加第二次世界大战的海军舰艇数据库正在考虑之中。数据库有以下关系:
类别(类别、类型、国家/地区、枪数、口径、排量)
船舶(名称、级别、已下水)
战斗(名称、日期)
结果(船舶、战斗、结果)
不同级别的船舶被安排到一个项目中。一个类别通常被指定为该类别中第一艘船的名称(头船);否则,该类别名称与数据库中的任何船舶名称都不一致。
类别关系包括类别名称、类型(bb 表示战舰,bc 表示战列巡洋舰)、船舶 build 国家、主炮数量、火炮口径(炮管直径,以英寸为单位)以及排水量(重量,以吨为单位)。船舶关系包括船舶名称、类别名称和发射年份。战斗关系涵盖了船只参加的战斗的名称和日期;而他们参与战斗的结果(沉没、受损或未受伤 - 好的)则属于结果关系。
注: 1) 结果关系可能包括船舶关系中未包含的船舶。 2) 沉船后无法参加战斗。
我的解决方案:
select a.ship from
(Select distinct ship, date
from outcomes join battles on outcomes.battle=battles.name
where result = 'damaged') a
join
(Select distinct ship, date
from outcomes join battles on outcomes.battle=battles.name
where result != 'damaged') b
on a.ship = b.ship
where a.date < b.date
结果: 您的查询在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了错误的数据集。 * 记录数错误(少2)
最佳答案
解决了!
select distinct kk.ship from
(Select ship,date from outcomes oo,battles bb where oo.battle=bb.name) tt
inner join
(Select ship,date as damagedate from outcomes oo,battles bb where result='damaged' AND oo.battle=bb.name) kk
ON tt.ship=kk.ship AND tt.date>kk.damagedate
关于mysql - http ://www. sql-ex.ru 练习 #39 返回正确的结果,但查询中有错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30831663/