找到有普通船和巡洋舰类的国家

时间:2014-02-27 08:02:23

标签: sql

类(class,type,country,numGuns,bore,displacement)

船舶(名称,类别,已启动)

战斗(姓名,日期)

结果(船舶,战斗,结果)

Classes关系包括班级名称,类型(战舰的bb或战斗巡洋舰的bc)

  1. 要了解的内容:[查找有普通船只和巡洋舰类别的国家]
  2. 我尝试了以下查询:
  3.     SELECT DISTINCT ds1.country 
          FROM (SELECT t2.country 
                  FROM Classes t2 
                 WHERE t2.type='bb'
                INTERSECT
                SELECT t3.country 
                  FROM Classes t3 
                 WHERE t3.type='bc') AS ds1
    
    • 我得到了正确的结果,但查询第二次检查失败,检查数据库。

    我得到了结果: 您的查询在主数据库上生成了正确的结果集,但在第二次检查数据库时未通过测试。 *错误的记录数量(更多2)

    您的查询结果:

    国家

    Gt.Britain

    日本

    http://www.sqlfiddle.com/#!2/d889a6

3 个答案:

答案 0 :(得分:0)

MySQL是否支持INTERSECT命令?

如果不能,您可以将查询重写为JOIN: -

SELECT DISTINCT t2.country 
FROM Classes t2 
INNER JOIN Classes t3 
ON t2.country  = t3.country 
WHERE t2.type='bb'
AND t3.type='bc'

答案 1 :(得分:0)

SELECT c.country
  FROM classes c
 WHERE c.type IN ('bc','bb')
 GROUP
    BY c.country
HAVING COUNT(DISTINCT c.type)=2;

http://www.sqlfiddle.com/#!2/d889a6/3

答案 2 :(得分:0)

您可以使用group by with aggregate function来检查是否有任何国家/地区同时拥有这两种类型的船只。

SELECT    country
FROM      Classes
GROUP BY  country
HAVING    SUM(case when type='bb' then 1 else 0 end) >= 1
AND       SUM(case when type='bc' then 1 else 0 end) >= 1;