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

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

相关推荐
云和数据.ChenGuang8 分钟前
运维故障之MySQL 连接授权错误
运维·数据库·人工智能·mysql
xkxnq15 分钟前
第二阶段:Vue 组件化开发(第 28天)
前端·javascript·vue.js
Yvonne爱编码32 分钟前
前端工程化进阶:从搭建完整项目脚手架到性能优化【技术类】
前端·状态模式
cypking37 分钟前
二、前端规范化 遇到的问题及解决方案
前端
小范馆38 分钟前
STM32F03C8T6通过AT指令获取天气API
前端·javascript·stm32
Maggie_ssss_supp1 小时前
Linux-MySQL数据类型&表操作
数据库·mysql
zhengxianyi5151 小时前
vue-cli build, vite build 生产部署刷新或弹窗404,页面空白修复方法
前端·javascript·vue.js·nginx·生产部署
廋到被风吹走1 小时前
【数据库】【MySQL】高可用架构深度解析:从主从复制到自动切换
数据库·mysql·架构
Filotimo_1 小时前
前端项目打包部署完整流程
前端
Savvy..1 小时前
Day15 Talis 前端
前端