如何使列的值与子查询中的所有值匹配

时间:2015-04-29 03:35:44

标签: sql oracle11g

如何获取与子查询中的所有值匹配的列值?

这是我的表:

Table P
p# - pname - color - city
1  -  nut  -  Red  - London
2  -  Bolt - Green - Paris
3  - Screw - Blue  - Rome
4  - Cam   - Blue  - Paris
...

例如,如果我想要具有相同颜色(P)的城市的名称?

我正在考虑这个问题:

SELECT city
FROM P
WHERE city = 'blue';

当然,它的作弊因为我只有几行,所以你如何编写一个可以概括它的查询?

*也许使用EXISTS或NOT EXISTS?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您需要的颜色与给定城市相同的城市名称。如果是这样,您可以使用连接和聚合:

select p.city
from P p join
     P p1
     on p1.city = 'Rome' and
        p1.city <> p.city and
        p1.color = p.color
group by p.city
having count(distinct color) = (select count(distinct color) from p where city = 'Rome');