【发布时间】:2015-08-18 02:42: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)
这是数据库描述:
参与二战的海军舰艇数据库正在考虑中。数据库有如下关系:
- 类(类、类型、国家、数量、口径、位移)
- 船舶(名称、等级、发射)
- 战斗(名称,日期)
- 结果(船、战斗、结果)
类中的船舶被安排到一个项目中。一个类通常被指定为所考虑的类中的第一艘船的名称(头船);否则,类名与数据库中的任何船名不一致。等级关系包括等级名称、类型(bb 代表战舰,或 bc 代表战列巡洋舰)、建造国家、主炮数量、炮口径(炮管直径,以英寸为单位)和排量(重量,吨)。 Ships 关系包括船名、船级名和发射年份。战斗关系包括舰艇参加的战斗的名称和日期;而他们参与战斗的结果(沉没、受损或安然无恙 - OK)在结果关系中。
注意事项:
- 结果关系可能包括未包含在船舶关系中的船舶。
- 此后沉船无法参加战斗。
【问题讨论】:
-
除其他外,您应该更改问题的名称,以便其他人更清楚您的问题。
-
不知道是不是只有我一个人,但是我看不懂加粗的重要部分。有没有机会稍微修正一下语言?
-
- 没有两场战斗是在同一天进行的- 如果船损坏并且不在以后的任何战斗中,则在下一场战斗中将船插入结果表,结果为“沉没”。 -如果下一场战斗不在数据库中,则不插入
标签: sql join insert-into dml