SQL是否能够查找重复记录?

5
我可以使用SQL查询来查找其中一个字段在两个表中都相同的记录吗?也就是说,我可以使用上面的表格,并通过比较名称列(并忽略电话)返回1,3(id)吗?
3个回答

10

要获取所有存在多次的名称,您可以执行以下语句:

SELECT Name FROM People GROUP BY Name HAVING COUNT(*)>1;

1
要获取ID,您可能需要使用上述语句与另一个SELECT语句结合使用。类似以下内容: SELECT id FROM [表名] WHERE NAME IN (SELECT Name FROM [表名] GROUP BY Name HAVING COUNT(*) > 1)就可以工作。 - Waleed Al-Balooshi
1
我想补充的一件事是,当使用姓名作为标识符来决定记录是否重复时,你需要小心,因为除非你确定表中永远不会有两个人拥有相同的姓名,否则你会遇到麻烦。 - Waleed Al-Balooshi

2
要获取重复的ID "1,3",请使用GROUP_CONCAT函数进行连接:
SELECT GROUP_CONCAT( ID SEPARATOR ',' )
FROM Table
GROUP BY Name
HAVING COUNT(*) > 1

0

另一种(不一定高效的)方法是使用自连接:

SELECT P1.Id, P2.Id
  FROM People P1, People P2
 WHERE P1.Id < P2.Id
   AND P1.Name = P2.Name;

第一个条件确保您只看到一对(1,3),而不是多余的一对(3,1)或相同的行(1,1),(3,3)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接