Sql 找到拥有普通船只和巡洋舰等级的国家

Sql 找到拥有普通船只和巡洋舰等级的国家,sql,Sql,类别类别、类型、国家/地区、数字、孔、位移 船舶名称、等级、下水 战斗名称、日期 结果、战斗、结果 类别关系包括类别名称、战舰的类型bb或战舰的类型bc 查找内容:[查找拥有普通船舶和巡洋舰级别的国家] 我尝试了以下查询: 我得到了正确的结果,但查询在第二次测试中失败,即检查数据库。 我得到的结果是: 您的查询在主数据库上生成了正确的结果集,但在第二个检查数据库上的测试失败。 *错误记录数增加2 您的查询结果: 国家 英国燃气轮机 日本 MySQL支持INTERSECT命令吗 如果不是,您能否将

类别类别、类型、国家/地区、数字、孔、位移

船舶名称、等级、下水

战斗名称、日期

结果、战斗、结果

类别关系包括类别名称、战舰的类型bb或战舰的类型bc

查找内容:[查找拥有普通船舶和巡洋舰级别的国家] 我尝试了以下查询: 我得到了正确的结果,但查询在第二次测试中失败,即检查数据库。 我得到的结果是: 您的查询在主数据库上生成了正确的结果集,但在第二个检查数据库上的测试失败。 *错误记录数增加2

您的查询结果:

国家

英国燃气轮机

日本


MySQL支持INTERSECT命令吗

如果不是,您能否将查询重写为联接:-

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

您可以使用group by with AGGRATE函数检查是否有任何国家同时拥有这两种类型的船舶

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;

你有一个所有国家的表吗?@JoeTaras NO.我列出了所有的表。给我们这个任务的链接:如果你添加一个包含国家的表,你可以使用exists函数,这样你就可以删除不同的构造。因此,通过这种方式,规范化您的数据库。@joetaras这可能没有抓住练习的重点-我不知道练习的重点是什么,因为mysql不支持INTERSECT。顺便说一句,我只用sql编写,intersect运行良好。唯一的问题是这工作正常:[从t2类中选择t2.country,其中t2.type='bb'相交从t3类中选择t3.country,其中t3.type='bc']但这不正常,两者没有区别:[从t2.type='bb'相交的t2类中选择不同的ds1.country,从t3.type='bc'相交的t3类中选择t3.country作为ds1]是吗?这个问题最初是用MySQL标记的;我不知道任何其他SQL方言。我删除了MySQL标记,因为它涉及MySQL不支持的intersect。避免intersect您的解决方案和我的解决方案都会起作用。@草莓我对SQL非常陌生。您能帮我找到一种方法,比如如何获得特征的名称一个co的名称吗我的结果集中的一个列中的ReRead列?@学习抱歉,我不知道你是什么意思。考虑把你原来的问题扩展到你现在所知道的和随后的部分问题上,或者问一个新的问题,链接到这个问题。@草莓是一个与当前查询无关的一般问题。以这个查询为例,我需要问的是:我想要一个两列的查询结果集,其中第一列由表列组成,如名称、类,在Ships表中启动,在第二列中,我想要一个特定where子句的相应值。我希望我能告诉你我在寻找什么:
SELECT c.country
  FROM classes c
 WHERE c.type IN ('bc','bb')
 GROUP
    BY c.country
HAVING COUNT(DISTINCT c.type)=2;
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;