根据第二列的公共数据检索第一列的行

时间:2012-10-17 16:14:52

标签: sql sql-server

说我有这样的输入:

1st column ---------2nd column
23 ---------------------- 0080
23 ---------------------- 0010
23 ---------------------- 0080
25 ---------------------- 0010
25 ---------------------- 0010
34 ---------------------- 0080
27 ---------------------- 0010
27 ---------------------- 0080

我想要检索第一列中包含第二列中0080和0010数据的所有行。 结果将是这样的:

1st column--------- 2nd column
23 ---------------------- 0080
23 ---------------------- 0010
23 ---------------------- 0080
27 ---------------------- 0010
27 ---------------------- 0080

从结果我们可以看出第一列不包括25,因为25在第二列中只有0010,而在第二列中只有0080的34相同。

我尝试使用嵌套查询,但由于我的表非常大(包含大约30,000多行),它变得非常慢。我正在寻找更快的大数据表的智能技术。

3 个答案:

答案 0 :(得分:4)

select * from your_table
where col1 in 
(
   select col1
   from your_table
   where col2 in ('0080', '0010')
   group by col1
   having count(distinct col2) = 2
)

答案 1 :(得分:0)

select first
from t
where second in ('0080', '0010')
group by first
having count(distinct second) = 2

答案 2 :(得分:0)

SELECT t.Col1,t.Col2
  FROM dbo.YourTable t
  JOIN(
    SELECT Col1, 
        MAX(CASE WHEN Col2 = '0010' THEN 1 ELSE 0 END) Has0010,
        MAX(CASE WHEN Col2 = '0080' THEN 1 ELSE 0 END) Has0080
      FROM dbo.YourTable
      GROUP BY Col1
  )FilterTbl f
  ON t.Col1 = f.Col1 AND f.Has0010 = 1 AND f.Has0080 = 1