mysql exists 和not exists 联合使用的bug

sql 复制代码
select * from student a  
where a.age>15
and
 exists(select 1 from score s where s.student_id = a.id and s.name='数学')
and 
 not exists (select 1 from score s where s.student_id=a.id and s.name<>'语文')

以上语句的含义:

查询出年龄大于15岁的并且参加过数学考试 但是没有参加过语文考试的学生。

也许会说这没有问题,但是当score表中有多条数据时,查询的结果就会出现重复的数据。

解决办法:

将not exists 换成 not in

sql 复制代码
select * from student a  
where a.age>15
and
 exists(select 1 from score s where s.student_id = a.id and s.name='数学')
and 
 a.id not in (select s.student_id from score s where  s.name<>'语文')

为什么查询结果会出现重复的数据,具体原因未知。

相关推荐
zheshiyangyang几秒前
前端面试基础知识整理【Day-10】
前端·面试·职场和发展
明月_清风3 分钟前
浏览器里的 SSD:IndexedDB 极简封装实战
前端·indexeddb
谢尔登7 分钟前
深入React19任务调度器Scheduler
开发语言·前端·javascript
堕2747 分钟前
MySQL数据库《基础篇--表的增删改查操作CRUD(3)》
数据库·mysql
长城20248 分钟前
HTML5中表单的pattern属性解析
前端·正则表达式·html·html5·pattern·pattern属性·pattern正则表达式
Flobby5298 分钟前
深入理解 MySQL 索引:从 B+ 树到索引下推
数据库·后端·mysql
阿珊和她的猫10 分钟前
深入解析如何监听浏览器的页面关闭事件
前端·javascript·vue.js
henry10101012 分钟前
DeepSeek生成的HTML5小游戏 -- 黑8台球
前端·javascript·css·游戏·html
阿珊和她的猫20 分钟前
Safari浏览器中监听页面关闭事件的技术探讨
前端·safari
昱宸星光21 分钟前
spring cloud gateway内置路由断言工厂
java·开发语言·前端