SQL-找到那些同时拥有战列舰和战列巡洋舰的国家

时间:2018-01-10 14:59:18

标签: sql

我在练习中有这个小数据库示例。

## country           type  ##
1. Germany           bb
2. USA               bb
3. Japan             bc
4. USA               bb
5. Gt. Britain       bc
6. Gt. Britain       bb
7. USA               bb
8. The Netherlands   bc
9. Japan             bb

现在的问题是:

  

查找同时拥有战舰和战列巡洋舰的国家

我已经考虑过了,但我似乎无法弄清楚如何处理这个问题,因为一个简单的AND函数不起作用。

4 个答案:

答案 0 :(得分:1)

country列分组,只选择那些不止一个ship_type

的群组
select country
from your_table
group by country
having count(distinct ship_type) = 2

答案 1 :(得分:0)

一种常见的方法是过滤到具有一种类型的国家/地区,比如说bb,然后将其过滤到只有bc EXISTS()的国家/地区:< / p>

SELECT DISTINCT country
FROM yourTable yt1
WHERE type = 'bb'
AND EXISTS (SELECT *
            FROM YourTable yt2
            WHERE type = 'bc'
            AND yt1.country = yt2.country)

答案 2 :(得分:0)

由于您想要比较同一个表的行,我认为您应该进行INNER JOIN。

类似的东西:

   select c.name from Country as c 
   INNER JOIN Country c1 
   ON c.name = c1.name
   AND NOT c.ship = c1.ship;

答案 3 :(得分:0)

SELECT country
FROM YourTable
GROUP BY country
HAVING MAX(CASE type WHEN 'bb' THEN 1 END) = 1
   AND MAX(CASE type WHEN 'bc' THEN 1 END) = 1
ORDER BY country