我想查询重复的记录,表的主键超过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语句。 感谢。
答案 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