当前位置:  开发笔记 > 数据库 > 正文

什么是SQL查询列出所有具有2列子行作为重复项的行?

如何解决《什么是SQL查询列出所有具有2列子行作为重复项的行?》经验,为你挑选了2个好方法。

我有一个具有冗余数据的表,我正在尝试识别所有具有重复子行的行(缺少更好的单词).通过子行我的意思是只考虑COL1COL2.

所以,假设我有这样的事情:

 COL1   COL2   COL3
 ---------------------
 aa     111    blah_x
 aa     111    blah_j
 aa     112    blah_m
 ab     111    blah_s
 bb     112    blah_d
 bb     112    blah_d
 cc     112    blah_w
 cc     113    blah_p

我需要一个返回此的SQL查询:

 COL1   COL2   COL3
 ---------------------
 aa     111    blah_x
 aa     111    blah_j
 bb     112    blah_d
 bb     112    blah_d

Blorgbeard.. 8

这对你有用吗?

select t.* from table t
left join ( select col1, col2, count(*) as count from table group by col1, col2 ) c on t.col1=c.col1 and t.col2=c.col2
where c.count > 1


Craig Trader.. 5

使用您列出的数据,您的查询无法进行.第5行和第6行的数据本身并不明显.

假设你的表名为'quux',如果你从这样的东西开始:

SELECT a.COL1, a.COL2, a.COL3 
FROM quux a, quux b
WHERE a.COL1 = b.COL1 AND a.COL2 = b.COL2 AND a.COL3 <> b.COL3
ORDER BY a.COL1, a.COL2

你最终得到这个答案:

 COL1   COL2   COL3
 ---------------------
 aa     111    blah_x
 aa     111    blah_j

这是因为第5行和第6行具有相同的COL3值.任何返回第5行和第6行的查询也将返回此数据集中所有行的重复项.

另一方面,如果您有主键(ID),则可以使用此查询:

SELECT a.COL1, a.COL2, a.COL3
FROM quux a, quux b
WHERE a.COL1 = b.COL1 AND a.COL2 = b.COL2 AND a.ID <> b.ID
ORDER BY a.COL1, a.COL2

[编辑简化WHERE子句]

你会得到你想要的结果:

COL1   COL2   COL3
---------------------
aa     111    blah_x
aa     111    blah_j
bb     112    blah_d
bb     112    blah_d

我刚刚在SQL Server 2000上对此进行了测试,但您应该在任何现代SQL数据库上看到相同的结果.

blorgbeard证明我错了 - 对他有好处!



1> Blorgbeard..:

这对你有用吗?

select t.* from table t
left join ( select col1, col2, count(*) as count from table group by col1, col2 ) c on t.col1=c.col1 and t.col2=c.col2
where c.count > 1



2> Craig Trader..:

使用您列出的数据,您的查询无法进行.第5行和第6行的数据本身并不明显.

假设你的表名为'quux',如果你从这样的东西开始:

SELECT a.COL1, a.COL2, a.COL3 
FROM quux a, quux b
WHERE a.COL1 = b.COL1 AND a.COL2 = b.COL2 AND a.COL3 <> b.COL3
ORDER BY a.COL1, a.COL2

你最终得到这个答案:

 COL1   COL2   COL3
 ---------------------
 aa     111    blah_x
 aa     111    blah_j

这是因为第5行和第6行具有相同的COL3值.任何返回第5行和第6行的查询也将返回此数据集中所有行的重复项.

另一方面,如果您有主键(ID),则可以使用此查询:

SELECT a.COL1, a.COL2, a.COL3
FROM quux a, quux b
WHERE a.COL1 = b.COL1 AND a.COL2 = b.COL2 AND a.ID <> b.ID
ORDER BY a.COL1, a.COL2

[编辑简化WHERE子句]

你会得到你想要的结果:

COL1   COL2   COL3
---------------------
aa     111    blah_x
aa     111    blah_j
bb     112    blah_d
bb     112    blah_d

我刚刚在SQL Server 2000上对此进行了测试,但您应该在任何现代SQL数据库上看到相同的结果.

blorgbeard证明我错了 - 对他有好处!

推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有