没有Union运算符SQL的查询

时间:2014-02-10 12:57:56

标签: sql sql-server union

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
       )

它返回正确的结果,但我想性能昂贵。 任何人都可以给我关于如何获得相同结果但没有工会的想法吗?

2 个答案:

答案 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