【问题标题】:SQL-EX.ru Exercise #36SQL-EX.ru 练习 #36
【发布时间】:2015-05-16 19:21:09
【问题描述】:

我正在尝试解决练习 #36,即列出数据库中的主舰名称(考虑到结果表)

主船是该类别中排在第一位的船的名称(即 2 艘船,但 1 艘在另一艘之前建造,因此第一艘船是“主船”)。我的结果表明我确实说明了以下内容:

您的查询在第一个(可用)数据库上返回了正确的数据集,但在第二个检查数据库上返回了不正确的数据集。 * 错误的记录数(减去 1)

我的查询如下:

SELECT A.name FROM Ships A
WHERE A.name = A.class
AND A.launched = (SELECT MIN(B.launched) FROM Ships B
              WHERE A.name = B.name
              AND A.class = B.class)
UNION ALL
SELECT A.ship
FROM Outcomes A
WHERE A.ship IN (SELECT C.ship FROM Outcomes C, Classes D
                 WHERE C.ship IN (SELECT ship FROM Outcomes)
                 AND C.ship NOT IN (SELECT name FROM Ships)
                 AND C.ship = D.class
                 )

数据库设置如下:

参与二战的海军舰艇数据库正在考虑中。

数据库有如下关系:

Classes(class, type, country, numGuns, bore, displacement) 
Ships(name, class, launched) 
Battles(name, date) 
Outcomes(ship, battle, result) 

类中的船舶被安排到一个项目中。一个类通常被分配给所考虑的类中的第一艘船的名称(头船);否则,类名与数据库中的任何船名不一致。

等级关系包括等级名称、类型(bb 代表战舰,或 bc 代表战列巡洋舰)、建造国家、主炮数量、炮口径(炮管直径,以英寸为单位) 和排量(重量以吨计)。

Ships 关系包括船名、船级名和发射年份。

Battles 关系包括船只参加的战斗的名称和日期;而他们参与战斗的结果(沉没、受损或安然无恙 - OK)在结果关系中。

注意事项:

  1. 结果关系可能包括未包含在船舶关系中的船舶。
  2. 此后沉船无法参加战斗。

现在我的查询返回了正确的答案,但在联合上它没有返回正确的值?我的理解是其中一个船名在 Ships 表中不存在,所以我从 Outcomes 中选择它来解决问题。但即使这样也不正确。我有什么遗漏吗?

【问题讨论】:

  • 你从来没有说过练习要求你做什么,所以我不知道查询应该返回什么。
  • 在该部分添加。没想到我错过了

标签: mysql sql


【解决方案1】:

主舰也是与它们所属的级别同名的舰船,我努力过,而且成功了:

WITH union1 (name) AS
    (SELECT name FROM ships WHERE name = class
     UNION SELECT ship AS name FROM outcomes 
     INNER JOIN classes ON classes.class = outcomes.ship)
SELECT DISTINCT name FROM union1

【讨论】:

    【解决方案2】:

    一个更简单的解决方案:

    select name from ships where name IN (select class from classes)
    UNION
    select ship from outcomes where ship IN (select class from classes)
    

    【讨论】:

      【解决方案3】:
      Select name from ships where name = class
      union
      select ship from outcomes join classes on outcomes.ship = classes.class
      

      【讨论】:

        猜你喜欢
        • 2015-07-24
        • 2016-03-31
        • 2014-03-24
        • 2015-08-18
        • 2014-11-01
        • 2016-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多