今天遇到了一个SQL语句的问题,现有一张表,表名为t_people。表数据如下所示:
要求:查询电话相同的人的姓名
刚看到这个问题的时候,我还有点犯晕(请不要嘲笑,确实我技术比较菜),然后自然只能上网查喽,查到类似的案例有两种方式。
第一种:SELECT p1.* FROM t_people p1 INNER JOIN t_people p2 ON p1.phone = p2.phone AND p1.id <> p2.id
结果耗时0.002s,如下所示:
第二种:SELECT * FROM t_people WHERE phone IN (SELECT phone FROM t_people GROUP BY phone HAVING COUNT(*) > 1)
结果耗时0.009s,如下所示:
第三种:SELECT id,NAME,phone,(SELECT COUNT(*) FROM t_people p2 WHERE p1.phone = p2.phone)AS total FROM t_people p1 HAVING total > 1
结果耗时0.001s