【问题标题】:Get two foreign key value from two table with join通过连接从两个表中获取两个外键值
【发布时间】:2018-08-17 04:38:09
【问题描述】:

下面有表格;

Course(cname, ccode, credit, dept) // course table.
Section(sno, ccode, semestr, year, prof); // course and lectures according to year and semester value.
Prerequisite(ccode, precode) // prerequisite for any course.

问题:

列出 2012 年开设的课程和必修课程 - 两者的代码和名称

我尝试通过加入来解决它。

select c.ccode, c.cname, p.precode from Course as c 
inner join prerequisite as p on p.ccode=c.ccode;

查询返回下面的元组。

Course | Name                 | Pre. code  
B201   | software engineering | B101  
B202   | operating system     | B101  
H202   | civil law            | H102

我怎样才能得到必修课程的名称和代码? 期望的结果必须低于;

Course    | Name                 | Pre. code  | Pre. name
B201      | software engineering | B101       | aaaaa   
B202      | operating system     | B101       | aaaaa 
H202      | civil law            | H102       | bbbb

【问题讨论】:

  • 你的课程和先修课有什么关系?是多对一还是多对多。如果你能发布关系的图片就更好了
  • 多对多,一门课程有不止一门必修课,一门课程是多门课程的必修课。我没有ER图。问题来自我的数据库考试。
  • 你需要加入预编码课程的名字

标签: sql join subquery inner-join


【解决方案1】:

我使用您的查询,并添加一个EXISTS 子句。基本上逻辑在EXISTS子句中,我发现所有课程在2012年都有部分。然后EXISTS只会返回匹配EXISTS子句的课程。

SELECT c.ccode, c.cname, p.precode 
FROM Course c 
JOIN prerequisite p ON p.ccode = c.ccode
WHERE EXISTS (
    SELECT 1
    FROM Section
    WHERE ccode = c.ccode AND year = '2012'
)

或者如果使用JOIN

SELECT c.ccode, c.cname, p.precode, cp.cname
FROM Course c 
JOIN prerequisite p ON p.ccode = c.ccode
JOIN Course cp ON cp.ccode = p.precode
JOIN Section s ON s.ccode = c.ccode
WHERE s.year = '2012'

【讨论】:

  • 我明白了。谢谢。 “加入表本身”很棒。 :)
【解决方案2】:
select c.ccode, c.cname
     , p.precode, cp.name as preName 
  from Course as c 
  join prerequisite as p 
    on p.ccode = c.ccode 
  join Cource cp 
    on cp.ccode = p.precode 

【讨论】:

  • 我已经尝试在先决条件表上进行第二次加入以获取名称。有用。谢谢。
猜你喜欢
  • 1970-01-01
  • 2019-08-03
  • 1970-01-01
  • 2011-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多