我有一个具有冗余数据的表,我正在尝试识别所有具有重复子行的行(缺少更好的单词).通过子行我的意思是只考虑COL1
和COL2
.
所以,假设我有这样的事情:
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证明我错了 - 对他有好处!
这对你有用吗?
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
使用您列出的数据,您的查询无法进行.第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证明我错了 - 对他有好处!