通过JOIN查询获取2012年课程及先修课代码与名称的技术问询
搞定2012年课程及其先修课信息的SQL查询方案
嘿,我来帮你解决这个问题!首先得明确下常见的课程表结构(如果你的表字段名不一样,直接替换就行):一般会有一个courses表存课程基本信息(比如课程代码、名称、开设年份),要么这个表自带prereq_code字段指向先修课,要么有个单独的course_prereqs表专门存课程和先修课的关联关系。
场景1:有单独的先修关系表
如果是分两张表的情况,你需要做两次连接:第一次把2012年的课程和它们的先修课代码关联上,第二次再用先修课代码去课程表里捞对应的名称。
给你写个示例SQL:
SELECT main_course.course_code AS 课程代码, main_course.course_name AS 课程名称, prereq_rel.prereq_code AS 先修课代码, prereq_course.course_name AS 先修课名称 FROM courses main_course -- 第一步:关联先修关系表,拿到先修课代码 JOIN course_prereqs prereq_rel ON main_course.course_code = prereq_rel.course_code -- 第二步:再关联课程表,拿到先修课的名称 JOIN courses prereq_course ON prereq_rel.prereq_code = prereq_course.course_code WHERE main_course.offer_year = 2012;
场景2:课程表自带先修课字段
如果你的courses表本身就有prereq_code字段,那直接做一次自连接就够了:
示例SQL:
SELECT main_course.course_code AS 课程代码, main_course.course_name AS 课程名称, main_course.prereq_code AS 先修课代码, prereq_course.course_name AS 先修课名称 FROM courses main_course -- 用LEFT JOIN是为了保留那些没有先修课的2012年课程,要是只想要有先修课的,换成INNER JOIN就行 LEFT JOIN courses prereq_course ON main_course.prereq_code = prereq_course.course_code WHERE main_course.offer_year = 2012;
为啥你之前的查询只返回部分元组?
大概率是你只做了一次连接,只拿到了先修课代码,没再去关联课程表取名称;或者用了INNER JOIN把没有先修课的课程给过滤掉了。如果需要包含无先修课的课程,记得用LEFT JOIN哦!
内容的提问来源于stack exchange,提问作者babeyh
相关产品推荐
相关产品推荐

