我有一个用于存储audit的数据库表,如下所示(它只是实际表的简单表示,其中status可以有许多值中的一个)
ID | STUDENT_ID | COURSE_ID | STATUS
1 | 5 | 12 | Enrolled
2 | 5 | 12 | In-Progress
3 | 2 | 12 | Enrolled
4 | 2 | 12 | Completed
5 | 5 | 12 | Completed
6 | 2 | 14 | Enrolled
我需要查找给定学生id和课程id对的所有记录作为标识符,其中状态属于已注册和已完成(即每个已注册和已完成状态有2条记录,或者只有一条已注册或已完成状态的记录)。
注意-对于状态不是已注册和已完成的学生id和课程id,不应存在条目。
输出表-
ID | STUDENT_ID | COURSE_ID | STATUS
3 | 2 | 12 | Enrolled
4 | 2 | 12 | Completed
6 | 2 | 14 | Enrolled
更新-如果我有另一个学生id 2条目的状态为进行中,它仍然应该返回我的课程,其中状态是注册和完成。
ID | STUDENT_ID | COURSE_ID | STATUS
1 | 5 | 12 | Enrolled
2 | 5 | 12 | In-Progress
3 | 2 | 12 | Enrolled
4 | 2 | 12 | Completed
5 | 5 | 12 | Completed
6 | 2 | 14 | Enrolled
7 | 2 | 14 | In-Progress
输出表-
ID | STUDENT_ID | COURSE_ID | STATUS
3 | 2 | 12 | Enrolled
4 | 2 | 12 | Completed
5条答案
按热度按时间ejk8hzay1#
对空测试使用左连接
t1rydlwq2#
正如您所提到的,您只需要这两个状态-“已注册”和“已完成”,就可以通过子查询实现您的目标
sf6xfgos3#
使用distinct和sub查询
http://sqlfiddle.com/#!9/f6d650/1号楼
另一种方式
http://sqlfiddle.com/#!9/f6d650/7号楼
rvpgvaaj4#
一种解决方案是返回状态为
Enrolled
或者Completed
,但不是别的:然后可以使用以下命令提取所有列:
0x6upsns5#
我只想排除
STUDENT_ID
&COURSE_ID
在哪里In-Progress
找到的状态: