如何查询多列的重复记录?

时间:2015-07-16 08:39:14

标签: sql-server sql-server-2008

我想查询重复的记录,表的主键超过3列。

我写的如下:

   SELECT * FROM table1 t 
   where (t.col1,t.col2,t.col3) in
   (
    SELECT col1,col2,col3 from table1  
    GROUP BY col1,col2,col3 
    HAVING count(*)>1
   )

但它在sql server 2008中不起作用。它报告错误的代码。 那么请告诉我如何编写正确的一个sql语句。 感谢。

2 个答案:

答案 0 :(得分:0)

检查一下!在这种情况下,您要检查三列中的副本。如果查询没有返回任何意味着没有重复的结果,则count(*)列计数解释每个组合的重复数。请尝试在col1,col2和col3的位置添加您拥有密钥的列。

从表1中选择col1,col2,col3,count() GROUP BY col1,col2,col3 有计数()> 1

希望这有帮助!

答案 1 :(得分:0)

现在您提供了一个演示示例,您可以使用它,例如:

-- Create demo data
CREATE TABLE #temp(col1 int, col2 int, col3 int)

INSERT INTO #temp(col1, col2, col3)
VALUES  (1,1,1),(1,2,3),(1,2,4),
        (1,2,3)-- the duplicate one

-- only the duplicated rows
SELECT col1, col2, col3
FROM #temp
GROUP BY col1, col2, col3
HAVING COUNT(*) > 1

-- Get all columns back based on the duplicates
SELECT *
FROM #temp as t
INNER JOIN (
        SELECT col1, col2, col3
        FROM #temp
        GROUP BY col1, col2, col3
        HAVING COUNT(*) > 1
    ) as dubs
    ON t.col1 = dubs.col1
    AND t.col2 = dubs.col2
    AND t.col3 = dubs.col3

-- Cleanup
DROP TABLE #temp