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

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

相关推荐
2401_896732135 小时前
MySQL小笔记
mysql
itmigrate5 小时前
前端项目里,Object.is 并不是 === 的平替
前端
小大宇7 小时前
Vue知识点6-computed计算属性
前端·javascript·vue.js
程序员塔塔喵7 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
程序员海军7 小时前
尤雨溪 : Vue 4 已经在规划中了!
前端·javascript·vue.js
2601_949970697 小时前
HumanizeDuration 跨端三方库仓颉适配全流程
前端·javascript·flutter
_孤傲_8 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
风骏时光牛马9 小时前
后端服务接口开发与性能优化
前端
kyriewen9 小时前
我让 4 个 AI 互相 review 代码,最温柔的那个下手最狠
前端·程序员·ai编程
计算机魔术师9 小时前
493家公司白砸AI钱?Apollo这组数据戳破了幻觉
前端