我有两张桌子。
public void Decision(string Var, string Input)
{
if (Var == "Name")
Name = Input;
else if (Var == "Nickname")
Nickname = Input;
}
public void Decision(int Input)
{
Age = input
}
我需要查询表格,以便它返回student_id和尚未学习的课程。结果应该是:
Course
course_id | name
------------------
1 | PROG
2 | ENGL
3 | SCIE
Enrollment List
ID | student_id | course_id | grade
-----------------------------------
1 | 445566 | 1 | 4.0
2 | 445566 | 2 | 2.0
3 | 778899 | 3 | 2.5
我尝试了查询
student_id | course_id
----------------------
445566 | 3
778899 | 1
778899 | 2
返回零记录。我该怎么做?
答案 0 :(得分:3)
简单规则:从不在FROM
子句中使用逗号。 始终使用明确的JOIN
语法。
无论如何,您需要以特定方式处理此问题。从所有学生和所有课程的列表开始。然后使用left join
或not exists
过滤掉列表中不存在的内容:
SELECT s.student_id, c.name
FROM course c CROSS JOIN
(SELECT DISTINCT student_id FROM list l) s
WHERE NOT EXISTS (SELECT 1
FROM list l2
WHERE c.course_id = l2.course_id and s.student_id = l2.student_id
)