找含匹配列的行_SQL SERVER数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

找含匹配列的行

作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0

本篇关键词:匹配A.col3A.col2方法
黑客防线网安网讯:查找含匹配列的行 //--为col2与col3查找出重复的行 //match_cols表 row_no col2 col3 ------ ---------- ---------- 1 c d 2 a a 3 a d 4 c b 5 c c 6 b c 7 c a 8 c b 9 c d 10 d d (10 ro...

查找含匹配列的行

//--为col2与col3查找出重复的行

//match_cols表

row_no col2 col3
------ ---------- ----------
1 c d
2 a a
3 a d
4 c b
5 c c
6 b c
7 c a
8 c b
9 c d
10 d d

(10 row(s) affected)

方法一:自联结法

对于到大量数据它的效率不高

SELECT DISTINCT A.row_no,A.col2,A.col3
FROM match_cols A,match_cols B
WHERE A.col2=B.col2 AND A.col3=B.col3
AND A.row_no<>B.row_no
ORDER BY A.col2,A.col3

方法二:相关子查询

SELECT A.row_no,A.col2,A.col3
FROM match_cols A
WHERE EXISTS(SELECT B.col2,B.col3
FROM match_cols AS B
WHERE A.col2=B.col2 AND A.col3=B.col3
GROUP BY B.col2,B.col3
HAVING COUNT(*)>1)
ORDER BY A.col2,A.col3

方法三:具体化非唯一的值然后联结到结果

SELECT col2,col3 INTO #mytemp
FROM match_cols
GROUP BY col2,col3 HAVING COUNT(*)>1

SELECT #mytemp.col2,#mytemp.col3,#mytemp.row_num
FROM #mytemp
JOIN match_cols
ON(#mytemp.col2=match_cols.col2 AND
#mytemp.col3=match_cols.col3)
ORDER BY 1,2,3

这种方法速度快因只有16种可能的组合,因此只有16种出现重复的方式,该临时表也就只包含16行。该临时表就成为该联结的外表。然后对这16行中的每一行扫描(利用索引)一次主表match_cols。这样就不象前面介绍的方法中那样,扫描次数高达5000,而是只扫描16次。这种方法是到现在为止最快的。纯SQL查询最适合这类工作,效率也高。

方法四:使用导出表

使用导出表的效果相当好,处理方法与临时表几乎完全相同。

SELECT A.row_num,A.col2,A.col3
FROM match_cols AS A
JOIN
(SELECT col2,col3 FROM match_cols AS B
GROUP BY col2,col3 HAVING COUNT(*)>1) AS B
ON(A.col2=B.col2 AND A.col3=B.col3)
ORDER BY A.col2,A.col3,A.row_num

********************************
row_no col2 col3
------ ---------- ----------
4 c b
8 c b
1 c d
9 c d

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-10448-1.html
网站维护教程更新时间:2012-03-21 03:04:41  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer