gpt4 book ai didi

mysql - 仅为使用 SQL 缺少这些成绩的学生插入成绩

转载 作者:太空宇宙 更新时间:2023-11-03 10:44:35 25 4
gpt4 key购买 nike

我是 SQL 的新手,遇到了这个问题:我必须检查是否每个学生都有所有成绩 (1-10)。如果学生缺少成绩,我必须将其插入。但是,任何学生都不应该拥有相同成绩的副本 - 他们应该恰好拥有一次。

我所做的就是显示所有学生的成绩:

 SELECT CONCAT(studentdata.FirstName,studentdata.LastName) AS 'Name', grade.Grade
FROM studentdata
CROSS JOIN grade
WHERE studentdata.Id = grade.IdStudent
ORDER BY Name

最佳答案

如果您的表 gradelevels 只有一列 (Grade),其中包含可能的成绩值 (1, 2, 3, ..., 10),您可以这样做它像这样:

INSERT INTO grade
SELECT
studentdata.Id AS IdStudent,
gradelevels.Grade AS Grade
FROM studentdata -- Get all the students,
CROSS JOIN gradelevels -- one time for each possible grade.
LEFT JOIN grade ON
-- Now we will know what (student, grade) combinations have an entry in grade.
studentdata.Id = grade.IdStudent AND gradelevels.Grade = grade.Grade
WHERE grade.IdStudent IS NULL -- Only take the rows where there isnt already a grade.

如果你不想有一个特定的等级表,你可以用这个替换 CROSS JOIN gradelevels:

CROSS JOIN (SELECT Grade FROM grade GROUP BY Grade) gradelevels

SELECT 将为您提供所有已使用的成绩,因此如果有一些成绩未用于任何学生,则不会插入。

我建议您在 Grade 表中为 IdStudentGrade 创建唯一索引(或将它们作为主键),以确保没有学生两次获得相同的成绩。

关于mysql - 仅为使用 SQL 缺少这些成绩的学生插入成绩,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33710770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com