如何用sql语句查询重复记录
表的名字是log,其中一个字段是message,我想用一条语句查询出来所有message有重复的记录。注:是所有有重复的记录都要列表出来,所以就不能用groupby,因为...
表的名字是log, 其中一个字段是message,我想用一条语句查询出来所有message有重复的记录。 注:是所有有重复的记录都要列表出来,所以就不能用group by,因为这样只会把每种重复的纪录取出一条来显示。 我原来的语句是这样写的: select * from log as a where (select count(*) from log as b where a.message = b.message)>1,但是当数据量达到2000的时候语句的效率就很差了,有谁能想出来更加高效的查询语句吗?
展开
1个回答
展开全部
select
*
from
log
as
a
,(select
message
from
log
group
by
message
having
count(*)>1)
b
where
a.message
=b.message
这么写会比你的写法效率高一些,不过暂时想不出可以大幅度改善性能的写法。
我的语句是联接,而楼主的查询是嵌套子查询。
SQL
SERVER帮助中说的很明白:在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。
*
from
log
as
a
,(select
message
from
log
group
by
message
having
count(*)>1)
b
where
a.message
=b.message
这么写会比你的写法效率高一些,不过暂时想不出可以大幅度改善性能的写法。
我的语句是联接,而楼主的查询是嵌套子查询。
SQL
SERVER帮助中说的很明白:在一些必须检查存在性的情况中,使用联接会产生更好的性能。否则,为确保消除重复值,必须为外部查询的每个结果都处理嵌套查询。所以在这些情况下,联接方式会产生更好的效果。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询