如何SQL DML - sql-ex.ru练习18

时间:2015-05-13 09:00:34

标签: sql join union insert-into dml

我一直在研究这个问题,我设法找到了一个解决方案但是在运动解决方案本身上它说我得到了正确数量的结果,但缺少了一些东西。

这是他们提出的练习。

  

您应该从Outcomes表中向船舶表中添加所有船舶(船上的第一艘船),这些船舶在船舶表中不存在。
  发射年份是指定船舶的国家船舶的平均指数,精确度在1年内   如果此平均年份未知,则不得将记录插入表中。

"您的查询在第一个(可用)数据库上返回了正确的数据集,但它在第二个检查数据库上返回了不正确的数据集。 *错误的记录数量(减少12个)"这是他们给我的暗示。 "如果她参加了多次战斗,请检查是否多次添加同一艘船。"

这是我写的查询:

insert into ships
select 
  ship, classes.class, 
  (select round(avg(1.0 * launched), 0, 0)  
   from ships 
join classes on ships.name = classes.class
where 
  launched is not null
group by country) as l_avgo  
from 
  outcomes 
join 
  classes on outcomes.ship = classes.class 
where 
  not exists (select name from ships )
group by 
  outcomes.ship, classes.class, classes.country
having 
  count(ship) = 1
union
select 
  name, ships.class, round(avg(1.0 * launched), 0, 0) as l_avgs 
from 
  ships
join 
  outcomes on ships.name = outcomes.ship 
where 
  launched is not null
group by 
  ships.name, ships.class

这是数据库描述

正在考虑参加第二次世界大战的海军舰艇数据库。该数据库具有以下关系:

  • 班级(班级,类型,国家,号码,号码,位移)
  • 船舶(名称,级别,已启动)
  • 战斗(姓名,日期)
  • 结果(船舶,战斗,结果)

课程中的船舶安排在一个项目中。通常会为一类人员分配正在考虑的类别中的第一艘船的名称(船头);否则,类名与数据库中的任何船名不一致。 Classes关系包括班级名称,类型(战斗船的bb,战斗巡洋舰的bc),建造船舶的国家,主炮的数量,枪口径(枪管的直径,以英寸为单位),以及排量(重量以吨计)。船舶关系包括船名,船级名称和发射年份。战斗关系包括船舶参与战斗的名称和日期;而他们参与战斗的结果(沉没,受损或无伤害 - 好的)是在结果关系中。 注:1)结果关系可能包括未包含在船舶关系中的船舶。 2)沉船在此之后不能参加战斗。

以下是表格关系 http://sql-ex.ru/help/select13.php#db_3

1 个答案:

答案 0 :(得分:0)

$(document).ready(function () {
    var $model = $('#model');
    var allOptions = $('#model').find('option').clone();
    $('#make').change(function () {
        var classN = $(this).find('option:selected').prop('class');
        $model.find('option:gt(0)').remove();
        allOptions.filter('.' + classN).appendTo($model);
    });
});