说我有这样的输入:
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多行),它变得非常慢。我正在寻找更快的大数据表的智能技术。
答案 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