mysql - http ://www. sql-ex.ru 练习 #39 返回正确的结果,但查询中有错误

标签 mysql

我的解决方案有错误吗?

任务是
定义“在未来的战斗中幸存下来”的船只;在一场战斗中受伤,他们又参加了另一场战斗。

数据库描述
参加第二次世界大战的海军舰艇数据库正在考虑之中。数据库有以下关系: 类别(类别、类型、国家/地区、枪数、口径、排量) 船舶(名称、级别、已下水) 战斗(名称、日期) 结果(船舶、战斗、结果) 不同级别的船舶被安排到一个项目中。一个类别通常被指定为该类别中第一艘船的名称(头船);否则,该类别名称与数据库中的任何船舶名称都不一致。 类别关系包括类别名称、类型(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/

相关文章:

mysql - 检测MySQL中的值是否为数字

mysql - 我想删除多行mysql

php - 通过 SQL Laravel 更新多行多表

php - 使用下拉菜单查询mysql

MySQL-如何更新小数列以允许点后有更多数字

php - 从坐标计算半径并在表格中找到半径内的所有匹配项

mysql - 有没有办法通过引入密码变量来更改当前用户的密码?

php - 如何在文本区域中将数据库中的 <br/> 显示为 HTML 而不是文本?

php - 使用php将部分文本从mysql更改为变量名

mysql - 记录后立即访问存储在DB表中的 `latest`记录