3.11 从属和包含:集合包含判断
根据课程表和选课表,查询同时选修了 Matlab 和 Modern wireless communication system 课程的学生。部分数据如下:
COURSE:
ID | NAME | TEACHERID |
---|---|---|
1 | Environmental protection and sustainable development | 5 |
2 | Mental health of College Students | 1 |
3 | Matlab | 8 |
4 | Electromechanical basic practice | 7 |
5 | Introduction to modern life science | 3 |
6 | Modern wireless communication system | 14 |
… | … | … |
SELECT_COURSE:
ID | STUDENT_NAME | COURSE |
---|---|---|
1 | Rebecca Moore | 2,7 |
2 | Ashley Wilson | 1,8 |
3 | Rachel Johnson | 2,7,10 |
4 | Emily Smith | 1,10 |
5 | Ashley Smith | 5,6 |
… | … | … |
这个题目并不复杂,就是判断选课表的课程字段中,是否包含课程集合 [3,6](Matlab 和 Modern wireless communication system 的课程 ID)。
SPL 中可以使用函数 A.pos(B) 获取集合 B 中的成员在集合 A 中的位置,不存在时返回 null。
脚本:
A | |
---|---|
1 | =T(“Course.xlsx”) |
2 | =T(“SelectCourse.xlsx”) |
3 | =A1.select(NAME==“Matlab” || NAME==“Modern wireless communication system”).(ID) |
4 | =A2.run(COURSE=COURSE.split@cp()) |
5 | =A4.select(COURSE.pos(A3)!=null) |
A1:从文件中导入课程表。
A2:从文件中导入选课表。
A3:选出两门课程的 ID 集合。
A4:将选修的课程按逗号分割后,解析数字组成集合。
A5:使用函数 A.pos() 在选课中定位两门课程的 ID,不为空的即为同时选择了两门课程的记录。