[英]sql statement complex condition “join”
我有这3张桌子
1. course
------------------------
CourseID CourseName
1 English 1
2 English 2
3 Math 1
4 Math 2
2. courseRequirements
------------------------
CourseID ReqID
2 1
4 3
3. studentcoursecomplete
-----------------------
CourseID StudentID
1 5
我需要一个选择语句执行以下操作
在此示例中,结果将是
CourseID CourseName
2 English 2
3 Math 1
因为学生完成英语1,所以他看不到
而且他没有完成数学1 ..所以他看不到数学2
我的选择语句做(1,2)
我该怎么办(3,4)
3-不显示要求学生未完成的课程
4-显示有学生要求完成的课程
SELECT course.*
FROM course
LEFT JOIN studentcoursecomplete ON studentcoursecomplete.CourseID = course.CourseID
LEFT JOIN courseRequirements ON courseRequirements.CourseID = course.CourseID
WHERE studentcoursecomplete.CourseID IS NULL
做到这一点的一种方法是,获取用户不在的内容,以及用户无法获取的内容,并从总结果集中过滤掉这些内容。
SELECT c.*
FROM course c
LEFT JOIN studentcoursecomplete scc ON scc.CourseID = c.CourseID
WHERE scc.studentid = 1
AND scc.CourseID IS NULL
AND c.courseid NOT IN
( SELECT cr.courseid
FROM courseRequirements cr
WHERE cr.reqid IN
( SELECT c.courseid
FROM course c
LEFT JOIN studentcoursecomplete scc ON scc.CourseID = c.CourseID
LEFT JOIN courseRequirements cr ON cr.CourseID = c.CourseID
WHERE scc.CourseID IS NULL
AND EXISTS
( SELECT 1 FROM courserequirements cr1
WHERE cr1.CourseID <> c.CourseID
AND cr1.reqid = c.courseid
)
)
)
调整OP的答案以包括特定的用户ID ...
SELECT c.*, sc.*
FROM semestercourses AS sc
NATURAL LEFT JOIN course AS c
NATURAL LEFT JOIN courserequirements AS cr
NATURAL LEFT JOIN studentcoursecomplete AS scc
WHERE sc.CourseID NOT IN
( SELECT CourseID
FROM studentcoursecomplete WHERE sid = 1
)
AND (cr.RequirementID IS NULL OR cr.RequirementID IN
( SELECT CourseID
FROM studentcoursecomplete WHERE sid = 1
)
)
SELECT c.*, sc.* FROM semestercourses AS sc
NATURAL LEFT JOIN course AS c
NATURAL LEFT JOIN courserequirements AS cr
NATURAL LEFT JOIN studentcoursecomplete AS scc
WHERE
sc.CourseID NOT IN (SELECT CourseID FROM studentcoursecomplete)
AND
(cr.RequirementID IS NULL OR cr.RequirementID IN (SELECT CourseID FROM studentcoursecomplete))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.