在主键上加入同一张表会产生不一致的结果

问题描述 投票:0回答:0

我正在努力解决这个挑战.

问题涉及两个表:

Students
Grades
Students
表有列:
ID
Name
Marks
,而
Grades
表有列
Min_Mark
Max_Mark
Grade
。 问题表述如下:

Ketty 给 Eve 一个任务来生成包含三列的报告:姓名、等级和标记。凯蒂不想要那些成绩低于 8 分的学生的姓名。报告必须按成绩降序排列——即首先输入较高的成绩。如果分配给同一年级 (8-10) 的学生不止一名,则按姓名字母顺序对这些特定学生进行排序。最后,如果成绩低于8,则用“NULL”作为他们的名字,并按成绩降序排列。如果分配给他们的同年级 (1-7) 不止一名学生,请按分数升序排列这些特定学生。

在尝试解决这个挑战时,我写了以下查询:

SELECT s2.Name, g.Grade, s1.Marks
FROM Students s1
JOIN Grades g
ON s1.Marks >= g.Min_Mark AND  s1.Marks <= g.Max_Mark
LEFT JOIN Students s2
ON s2.ID = s1.ID AND g.Grade >= 8
ORDER BY g.Grade DESC, s2.Name, s1.Marks 

其中输出为:

    Belvet 10 96

    Britney 10 95

    Heraldo 10 94

    Julia 10 96

    Kristeen 10 100

    Stuart 10 99

    Amina 9 89

    Christene 9 88

    Jane 9 87

    Salma 9 81

    Samantha 9 87

    Scarlet 9 80

    Vivek 9 84

    Aamina 8 77

    Belvet 8 78

    Julia 8 78

    Paige 8 74

    Priya 8 76

    Priyanka 8 77

    NULL 7 64

    NULL 7 66

    NULL 6 55

    NULL 4 34

    NULL 3 24

由于查询未被接受,我尝试通过修改上述查询的

SELECT
部分来调查JOIN操作的正确性:

SELECT s2.Name, g.Grade, s1.Marks, s2.id, s1.id, s2.marks
FROM Students s1
JOIN Grades g
ON s1.Marks >= g.Min_Mark AND  s1.Marks <= g.Max_Mark
LEFT JOIN Students s2
ON s2.ID = s1.ID AND g.Grade >= 8
ORDER BY g.Grade DESC, s2.Name, s1.Marks 

然后我很惊讶地看到输入中的一些记录具有不同的

s1.Marks
s2.Marks
值,尽管 JOIN 条件是
s1.ID = s2.ID
。例如:

Belvet 10 96 21 21 78

这是什么原因?

sql mysql join left-join
© www.soinside.com 2019 - 2024. All rights reserved.