问题描述
有一次遇到这样一个面试题,说如果一个表中没有主键,如何找到里面重复的数据?
表数据如下:
表结构如下:
针对以上问题,有以下几种解决方案
解决方案
1. 使用 GROUP BY 分组查询法
利用 GROUP BY 分组查询语句来分组聚合,然后筛选出出现次数大于1的重复记录。例如:
sql复制代码SELECT column1, column2, column3, COUNT(*) as count FROM table_name GROUP BY column1, column2, column3 HAVING count > 1;
该语句将按照 column1、column2、column3 分组,统计每个分组的数量,然后取出数量大于 1 的分组。该方法比较简单,但是如果表中记录较多,可能查询效率较低。
2. 使用子查询法
使用子查询获得重复的记录,例如:
sql复制代码SELECT * FROM table_name WHERE (column1, column2, column3) IN (SELECT column1, column2, column3 FROM table_name GROUP BY column1, column2, column3 HAVING COUNT(*) > 1)
该语句子查询部分统计每个不同的 column1、column2、col