查询出一张表中某个字段具有相同值的记录
2016-04-16 08:53
537 查看
这是一次面试碰到的题目,一开始以为要用到group by关键字,后来仔细想了下,其实不需要的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/9c7f3fd13a97cb80d6448e327f1403bc)
这张数据表名为student,各字段名如上图所示
我写的sql如下所示:
第一种:用关联查询
SELECT DISTINCT s1.*
FROM student s1, student s2
WHERE s1.id != s2.id
and s1.`name` = s2.`name`
ORDER BY s1.id;
SELECT DISTINCT s1.*
FROM student s1 LEFT JOIN student s2
ON s1.id != s2.id
WHERE s1.`name` = s2.`name`
ORDER BY s1.id;
第二种:用嵌套查询
SELECT s1.*
FROM student s1
WHERE s1.`name` in (
SELECT s2.`name`
FROM student s2
WHERE s2.id != s1.id
and s2.`name` = s1.`name`
)
ORDER BY s1.id;
第三种:用exists子查询
SELECT s1.*
FROM student s1
WHERE EXISTS (
SELECT 1
FROM student s2
WHERE s2.id != s1.id
and s2.`name` = s1.`name`
)
ORDER BY s1.id;
查询结果如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201909/10/d7069bba1f398c09c6935736b19e6041)
注:第一种方法的distinct关键字必须要有,要不然会有重复的记录。
PS:group by 关键字一般只有在统计查询时才用到。还有如果用group by 关键字时,select查询字段只能是集函数或者是group by 中的字段
这张数据表名为student,各字段名如上图所示
我写的sql如下所示:
第一种:用关联查询
SELECT DISTINCT s1.*
FROM student s1, student s2
WHERE s1.id != s2.id
and s1.`name` = s2.`name`
ORDER BY s1.id;
SELECT DISTINCT s1.*
FROM student s1 LEFT JOIN student s2
ON s1.id != s2.id
WHERE s1.`name` = s2.`name`
ORDER BY s1.id;
第二种:用嵌套查询
SELECT s1.*
FROM student s1
WHERE s1.`name` in (
SELECT s2.`name`
FROM student s2
WHERE s2.id != s1.id
and s2.`name` = s1.`name`
)
ORDER BY s1.id;
第三种:用exists子查询
SELECT s1.*
FROM student s1
WHERE EXISTS (
SELECT 1
FROM student s2
WHERE s2.id != s1.id
and s2.`name` = s1.`name`
)
ORDER BY s1.id;
查询结果如下:
注:第一种方法的distinct关键字必须要有,要不然会有重复的记录。
PS:group by 关键字一般只有在统计查询时才用到。还有如果用group by 关键字时,select查询字段只能是集函数或者是group by 中的字段
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- 我是运营,我没有假期
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜