2010-04-22 90 views
0

读取多行考虑这个数据基于分组

 
PK field1 field2 
1 a  b 
2 a  (null) 
3 x  y 
4 x  z 
5 q  w 

我需要得到这个数据

从那里字段1具有所有的行选择所有列计数> 1

这意味着所需的输出是

 
PK field1 field2 
1 a  b 
2 a  (null) 
3 x  y 
4 x  z 

我试过,最后结算为

select * from mytable where field1 in 
(select field1 from mytable group by field1 having count(field1)>1) order by field1 

但必须有比这

回答

0

这就是我会做的方式更好的办法。

你可以用子查询的连接重写它,而不是使用in,但我怀疑它会更快。

编辑:好了,以供参考,在“加入”法会去是这样的:

select m.* from mytable m 
join (
    select field1 from mytable 
    group by field1 
    having count(field1)>1 
) j on m.field1=j.field1 
order by m.field1 

而且似乎这是值得的测试,看看它的速度更快(感谢@binaryLV)。

+0

我会去的 “加盟路”。我在Oracle的子查询中遇到了速度问题 - 使用简单的子查询花费大约180秒的时间,但使用连接的查询花费大约180秒 - 小于0.5秒。所以我会建议至少做一个测试,看看加盟真的不是更快。 – binaryLV 2010-04-22 10:20:01

0

的另一种方法,如果使用T-SQL

;WITH T AS 
(
SELECT PK, FIELD1, FIELD2, COUNT(FIELD1) OVER(PARTITION BY FIELD1) AS R 
) 
SELECT PK, FIELD1, FIELD2 
FROM T 
WHERE R > 1