mysql多表查询问题,两次结果不一样

不知道为什么mysql执行这两sql语句的结果不一样

img

img


题目要求查询所有课程,是所有课程的成绩都小于60分的,第一条sql语句是直接取了个反
为什么第二条sql语句直接写小于就不行了

因为一个人考了多门课。如果王五一门80,剩下都不及格。第一个sql会把王五排除掉。

你的not in 里面放的是一个查询sql,这个查询sql是有结果的,他跟你第二张图中查询结果的SID重复了,not in 把这些SID都给排除掉啦

【以下回答由 GPT 生成】

问题原因: 第一个SQL语句使用了子查询和"NOT EXISTS"来进行反向查询,找出在成绩表中不存在成绩大于等于60的课程ID所对应的课程表记录。这样查询出的结果是成绩都小于60分的课程表记录。

而第二个SQL语句直接使用"<"符号来进行查询,它只是简单地找出成绩小于60的课程表记录。这样查询出的结果可能包含两种情况,一种是成绩小于60的课程表记录,另一种是没有对应成绩的课程表记录。所以返回的结果会与第一个SQL语句不一样。

解决方案: 为了使第二个SQL语句能够得到和第一个SQL语句一样的结果,需要使用关联查询来实现。具体步骤如下:

  1. 使用INNER JOIN将课程表和成绩表关联起来,关联条件为课程ID相等。
  2. 在关联查询的结果中使用WHERE子句进行筛选,筛选条件为成绩小于60。
  3. 最后使用DISTINCT关键字去重,保证查询结果中每个课程只有一条记录。
  4. 查询出的结果即为成绩都小于60分的课程表记录。

下面是修改后的SQL语句示例:

SELECT DISTINCT 课程表.*
FROM 课程表
INNER JOIN 成绩表 ON 成绩表.课程ID = 课程表.课程ID
WHERE 成绩表.成绩 < 60

这样修改后的SQL语句就能够得到和第一个SQL语句相同的结果了。



【相关推荐】



如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^