我在练习中有这个小数据库示例。
## 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函数不起作用。
答案 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