【问题标题】:mysql left outer joinmysql左外连接
【发布时间】:2017-12-07 00:20:24
【问题描述】:

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

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

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

例如,我有一个 id 为 1 的班级和一个 id 为 2 的班级 id 为 1 的课程 1 ,2 和 3 依赖于单元 1 依赖于班级 1 课程 4,5 和 6 依赖于单元 2 依赖于班级2 我有一个 groupe 1 依赖于表分配中的 classe 1 我有 2 行 (groupe1,courses1),(groupe1,courses2) 我想进行查询以返回仍未分配给 groupe 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

【问题讨论】:

  • 我没有关注...您能否分享一些示例数据、您获得的结果以及期望的结果?您编写的查询将返回所有没有作业记录的课程,这听起来像是您想要得到的。
  • 这个查询返回所有不在表assignement中的课程,我只想让crouses依赖于给定groupe的同一类
  • 例如,我有一个 id 为 1 的课程和一个 id 为 2 的课程 groupe 的 id 为 1 课程 1 ,2 和 3 取决于单元 1,这取决于课程 1 课程 4,5 和 6 取决于单元2 依赖于类 2 我有一个分组 1 依赖于表分配中的类 1 我有 2 行 (groupe1,courses1),(groupe1,courses2) 我想进行查询以返回仍未分配给的课程 3 groupe 1 查询返回课程 3、4、5 和 6,但我只想获得课程 3

标签: mysql sql hibernate join left-join


【解决方案1】:

根据您的描述,您的左连接并非不正确,因为您没有任何代码可以表达您的额外约束“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 的约束是形成给定组的相同类。 teachingUnit u ON u.id_unit = c.id_unit上的INNER JOIN处理“and u.idunit=c.idunit”的约束

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

【讨论】:

  • @rammeh-nasr 我看了你建议的编辑。您建议的 sql 无效。 JOINS 之间不能有 WHERE 子句。但我确实简化了代码。让我知道它是否有效。如果确实如此,请将我的回复标记为帮助社区的答案,以便人们知道这个问题已得到解答。如果没有,请告诉我出了什么问题。
猜你喜欢
  • 1970-01-01
  • 2018-09-04
  • 2014-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-25
  • 2013-09-07
相关资源
最近更新 更多