mysql左外连接

时间:2017-07-03 16:41:59

标签: mysql sql hibernate join left-join

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

我想找到一些不属于特定组合的课程 所以这门课程取决于依赖于groupe的classe的单位

我写了这段代码

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

但是返回课程取决于所有未分配的课程

附加信息(从评论中复制)

对于exempl我有一个id为1的classe和一个id为2的grous,id为1的课程1,2和3依赖于单元1,这取决于classe 1个课程4,5和6依赖于单元2依赖于classe 2我有一个groupe 1依赖于classe 1 in table asignement我有2行(groupe1,courses1),(groupe1,courses2)我想做一个查询返回课程3仍然没有分配给groupe 1查询返回课程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

1 个答案:

答案 0 :(得分:0)

根据您的描述,您的左连接不正确是您没有任何代码表示您的额外约束“u.idunit = c.idunit和u.classes与给定的groupe相同的类”

这应该是您想要的代码:

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的约束是与给定的groupe相同的类。 INNER JOIN上的teachingUnit u ON u.id_unit = c.id_unit处理“和u.idunit = c.idunit”的约束

我希望这会有所帮助。因为在您的示例中,您的表名和列不一致,并且您的目标很难理解。这个解决方案是我能想出的最好的假设,它是由必要性做出的。