链接表中的父记录和子记录的SQL连接

时间:2016-03-28 11:59:36

标签: sql oracle join

我正在努力创建一个在单个查询中返回父记录和子记录的SQL语句。

这些是我的桌子......

COURSE

COURSE_ID | COURSE_CODE
----------+------------
912689    | AUS_COURSE
912389    | AUS_FH1
912769    | AUS_FH2
912528    | AUS_SSMOC1
912293    | AUS_UNIT1
912295    | AUS_UNIT2
912303    | AUS_UNIT3

COURSE_LINKS

COURSE_ID_FROM | COURSE_ID_TO
---------------+-------------
912689         | 912293
912689         | 912295
912689         | 912303

您可以在我的链接表中看到 AUS_COURSE 有3个子记录, AUS_UNIT1 AUS_UNIT2 AUS_UNIT3

我希望我的查询以某种方式返回COOURSE表中的父记录和子记录,因此输出将类似于......

COURSE_ID | COURSE_CODE
----------+------------
912689    | AUS_COURSE
912293    | AUS_UNIT1
912295    | AUS_UNIT2
912303    | AUS_UNIT3

我正在努力研究加入什么以及加入哪个字段

非常感谢,

3 个答案:

答案 0 :(得分:3)

您可以使用IN(child,parent)和distinct来连接表,以删除重复项,如下所示:

SELECT distinct c.course_ID,c.course_code
FROM COURSE c
INNER JOIN COURSE_LINKS cl
 ON(c.course_ID in(cl.course_id_from,cl.course_id_to))

答案 1 :(得分:1)

我选择了一个subselect而不是一个join。

select COURSE_ID, COURSE_CODE from COURSE 
where COURSE_ID in (select COURSE_ID_FROM from COURSE_LINKS) 
OR COURSE_ID in (select COURSE_ID_TO from COURSE_LINKS)

答案 2 :(得分:0)

您可以使用UNION ALL

SELECT COURSE_ID, COURSE_CODE
FROM COURSE
WHERE COURSE_ID = 912689

UNION ALL

SELECT c1.COURSE_ID, c1.COURSE_CODE
FROM COURSE AS c1
JOIN COURSE_LINKS AS c2 ON c1.COURSE_ID = c2.COURSE_ID_TO
WHERE c2.COURSE_ID_FROM = 912689