TABLE X
col1,col2
1 , 2
1 , 7
1 , 4
1 , 8
2 , 3
2 , 1
2 , 2
3 , 1
3 , 8
3 , 9
3 , 4
4 , 5
4 , 3
4 , 2
4 , 8
4 , 4
我想检索col2中包含值2和4的col1值 在这种情况下,它将检索值1和4 如何在不使用UNION ALL运算符的情况下完成此操作?
我正在使用的查询是
select distinct col1
from X as A
where col1 = (
select col1 from (
select distinct col1
from X as B
where A.col1 = B.col1 and col2 = 2
union ALL
select distinct col1
from X as C
where A.col1 = C.col1 and col2 = 4
) D
group by col1
having count(col1) > 1
)
它返回正确的结果,但我想性能昂贵。 任何人都可以给我关于如何获得相同结果但没有工会的想法吗?
答案 0 :(得分:2)
此问题称为Relational Division,这是一种方法:
SELECT col1
FROM tablex
WHERE col2 IN (2, 4)
GROUP BY col1
HAVING COUNT(DISTINCT col2) >=2
HAVING COUNT(col2) >=2
将确保所选的col1
必须至少包含两个值2和。
答案 1 :(得分:1)
我认为最佳表现将来自内心加入桌子:
SELECT DISTINCT X1.col1
FROM X X1 INNER JOIN X X2 ON X1.col1=X2.col1
WHERE X1.col2=2 AND X2.col2=4