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<>'语文')

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

相关推荐
闻哥6 分钟前
深入理解 MySQL InnoDB Buffer Pool 的 LRU 冷热数据机制
android·java·jvm·spring boot·mysql·adb·面试
读忆13 分钟前
解决 `:first-child` / `:last-child` 不生效的问题
前端·css·vue.js·css3
兔年鸿运Q小Q14 分钟前
vue 使用public数据
前端·javascript·vue.js
Binary-Jeff17 分钟前
MySQL MVCC 原理解析:Undo Log、ReadView 与版本可见性机制
java·数据库·后端·mysql·spring
wuhen_n17 分钟前
开发环境优化完全指南:告别等待,让开发如丝般顺滑
前端·javascript·vue.js
bug远离Jemma17 分钟前
MySql基本使用命令记录
数据库·mysql·oracle
专注_每天进步一点点22 分钟前
mysql-connector-j(8.0 及以上版本,包括你使用的 8.3.0)并非采用 GPL 许可证,因此你在项目中引入该依赖时,不需要遵循 GPL 的开源要求(比如开源你的整个项目)
数据库·mysql·apache
WangYaolove131422 分钟前
基于循环神经网络的情感分类(源码+文档)
python·mysql·django·毕业设计·源码
badhope23 分钟前
GitHub超有用项目推荐:skill仓库--用技能树打造AI超频引擎
java·开发语言·前端·人工智能·python·重构·github
时寒的笔记25 分钟前
js逆向入门03_会展中心案例&shuwei观察&ji思录
开发语言·前端·javascript