考虑这个数据
PK field1 field2 1 a b 2 a (null) 3 x y 4 x z 5 q w
我需要获取此数据
从field1已计数的所有行中选择所有列> 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 :(得分:0)
这就是我这样做的方式。
您可以使用对子查询的连接重写它,而不是使用in
,但我怀疑它会更快。
编辑:好的,所以作为参考,“join”方法会是这样的:
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)。
答案 1 :(得分: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