选择集合中缺少子记录的MYSQL记录
情况是这样的:如果有人修了一门课,他们必须修一套其他的课程作为补充。如何识别学生尚未学习的课程 这是我的桌子:选择集合中缺少子记录的MYSQL记录,mysql,Mysql,情况是这样的:如果有人修了一门课,他们必须修一套其他的课程作为补充。如何识别学生尚未学习的课程 这是我的桌子: tbl_course_dependency_lookup courseid dependentid 133 57 133 55 133 71 167 57 167 99 tbl_user_course_completed userid courseid 12 1
tbl_course_dependency_lookup
courseid dependentid
133 57
133 55
133 71
167 57
167 99
tbl_user_course_completed
userid courseid
12 133
12 55
13 71
14 133
15 100
以下是应返回的数据:
userid courseid dependentid
12 133 57
12 133 71
14 133 55
14 133 57
14 133 71
受抚养人是补充课程的参考?那么您想确定用户未完成的课程?例如:如果用户已完成课程“133”而不是其补充课程,则查询应返回“57”,因为该用户未完成课程?dependentid是其他课程的id?是否要标识课程或依赖项,或两者都标识?dependentid和courseid列引用课程表中相同的课程索引。57、59、71、99、133、167都是课程表中的课程。查询应返回最后一个代码块中列出的列:userid、courseid和dependentid。工作非常顺利!非常感谢。
DROP TABLE IF EXISTS course_dependency;
CREATE TABLE course_dependency
(course_id INT NOT NULL
,dependent_id INT NOT NULL
,PRIMARY KEY(course_id,dependent_id)
);
INSERT INTO course_dependency VALUES
(133 ,57),
(133 ,55),
(133 ,71),
(167 ,57),
(167 ,99);
DROP TABLE IF EXISTS user_course;
CREATE TABLE user_course
(user_id INT NOT NULL
,course_id INT NOT NULL
,PRIMARY KEY(user_id,course_id)
);
INSERT INTO user_course VALUES
(12 ,133),
(12 ,55),
(13 ,71),
(14 ,133),
(15 ,100);
SELECT uc.*
, cd.dependent_id
FROM user_course uc
JOIN course_dependency cd
ON cd.course_id = uc.course_id
LEFT
JOIN user_course ucx
ON ucx.user_id = uc.user_id
AND ucx.course_id = cd.dependent_id
WHERE ucx.user_id IS NULL;
+---------+-----------+--------------+
| user_id | course_id | dependent_id |
+---------+-----------+--------------+
| 12 | 133 | 57 |
| 12 | 133 | 71 |
| 14 | 133 | 55 |
| 14 | 133 | 57 |
| 14 | 133 | 71 |
+---------+-----------+--------------+