我有一些SQL表
table classes(id_classes,specialty,level)
table Teaching unit(id_unit,name,...,#id_classes)
table courses(#id_course,....,#id_unit)
table groupes(id_groupe,...,#id_classes)
table assignment(#id_groupe,#id_course)
我想找到不属于给定组的课程
所以这门课是根据与小组的班级有关的单元
我写了这段代码
select * from courses c
left join assignment a
on a.idcourse=c.idcourse and a.id_groupe ='given id'
where a.id_courses is null
但这返回的课程取决于所有未分配的课程
附加信息(从评论中复制)
例如,我有一个ID为1的班级和ID为2的班级,ID为1的班级,课程1,2和3依赖于单元1,而依赖课程1的课程4,5和6取决于依赖于课程2的单元2组1依赖表分配中的类1我有2行(groupe1,courses1),(groupe1,courses2)我要查询返回仍未分配给组1的课程3的查询,查询返回课程3 ,4、5和6,但我只想获得课程3
select c.* from courses c ,unit u where (courses not in asignment where id_groupe=given id) and u.idunit=c.idunit and u.classes is the same classes form the given groupe
最佳答案
根据您的描述,您的左联接是正确的,因为您没有任何代码来表达您的额外矛盾“ u.idunit = c.idunit和u.classes是与给定组相同的类”
这应该是您想要的代码:
SELECT *
FROM courses c
LEFT JOIN assignment a ON c.id_course = a.id_course
INNER JOIN teachingUnit u ON u.id_unit = c.id_unit
AND u.id_classes IN (SELECT id_classes
FROM groupes
WHERE id_groupe = ‘givenID’)
WHERE a.id_course IS NULL AND a.id_groupe = ‘givenID’
这个子查询
(SELECT id_classes
FROM groupes
WHERE id_groupe = ‘givenID’)
处理u.classes的约束是与给定组相同的类。
INNER JOIN
上的teachingUnit u ON u.id_unit = c.id_unit
处理“和u.idunit = c.idunit”的约束我希望这有帮助。因为在您的示例中,表名和列不一致,并且目标难以理解。这个解决方案是我最好的解决方案,它是基于必要性而做出的最小假设。
关于mysql - mysql左外连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44890513/