- Rongsen.Com.Cn 版权所有 2008-2010 京ICP备08007000号 京公海网安备11010802026356号 朝阳网安编号:110105199号
- 北京黑客防线网安工作室-黑客防线网安服务器维护基地为您提供专业的
服务器维护
,企业网站维护
,网站维护
服务 - (建议采用1024×768分辨率,以达到最佳视觉效果) Powered by 黑客防线网安 ©2009-2010 www.rongsen.com.cn
作者:黑客防线网安SQL维护基地 来源:黑客防线网安SQL维护基地 浏览次数:0 |
查找含匹配列的行
//--为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
我要申请本站:N点 | 黑客防线官网 | |
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479 |