我有一些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/

10-10 09:26