在Word中循环选择?

时间:2018-05-20 04:05:22

标签: mysql sql

我有以下表格

class_student_mapping

class_id    student_id
    1   1
    1   2
    1   3
    1   4
    2   1
    2   2


student_program_mapping
 student_id     class_id    program_id
    1               1         1
    2               1         1

我需要按班级为学生分配课程

我将获得课程ID和课程ID,而不是我需要在获得该学生后在student_program_mapping中检查最新分配的学生我将从class_student_mapping表中分配新学生,该学生的student_id大于上次分配的学生

为此我在sql下面使用

SELECT MAX( `student_id` ) as last_assigned_student
FROM `student_program_mapping`
WHERE `class_id` =1
AND `program_id` =1

哪个给我结果= 2现在我在class_student_mapping表中找到了大于2的学生ID

SELECT `student_id`
FROM `class_student_mapping`
WHERE `student_id` > (
SELECT MAX( `student_id` ) AS last_assigned_student
FROM `student_program_mapping`
WHERE `class_id` =1
AND `program_id` =1 ) order by student_id  limit 1

我给了我学生ID为3,这是我想要的结果

但我有问题,如果我必须为学生计划映射表中没有任何学生程序映射的类ID 2而不是在这种情况下如何获得学生ID。

请帮帮我

与第2课的情况一样。我需要在student_program_mapping表中第一次添加学生,所以我需要最低的学生ID但是这个查询我第一次没有得到它

1 个答案:

答案 0 :(得分:1)

您的问题是子查询返回NULL,因为class_id=2中的student_program_mapping没有条目,与NULL的任何比较都返回false。要解决此问题,请将MAX(student_id)包装在IFNULL中,以便在该情况下返回0:

SELECT `student_id`
FROM `class_student_mapping`
WHERE `student_id` > (
SELECT IFNULL(MAX( `student_id` ), 0) AS last_assigned_student
FROM `student_program_mapping`
WHERE `class_id` =2
AND `program_id` =1 ) order by student_id  limit 1

输出(SQLFiddle):

student_id
1