编写一个 SQL 查询,查找 Student 表中所有重复的电话号码。
解法一:最容易想到的就是使用自连接方法,但当数据量变大时,这个方法就不如其他方法。
SELECT DISTINCT A.Phone FROM Student A JOIN Student B ON A.Phone=B.Phone AND A.Id!=B.Id
解法二:看到“找所有重复”的关键字眼,首先要用分组函数(group by),再用聚合函数中的计数函数count()给电话号码列计数,再用HAVING条件选出计数大于1的电话号码,就是重复的电话号码。
SELECT Phone FROM Student GROUP BY Phone HAVING COUNT(Phone)>1
解法三:
SELECT Phone FROM (SELECT COUNT(1) AS P,Phone FROM Student GROUP BY Phone)a WHERE A.P>1