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

链接表中父记录和子记录的SQL联接,sql,oracle,join,Sql,Oracle,Join,我正在努力创建一个SQL语句,在一个查询中同时返回父记录和子记录 这些是我的桌子 课程 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 课程链接

我正在努力创建一个SQL语句,在一个查询中同时返回父记录和子记录

这些是我的桌子

课程

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_ID_FROM | COURSE_ID_TO
---------------+-------------
912689         | 912293
912689         | 912295
912689         | 912303
因此,正如您在我的链接表中所看到的,AUS\u课程有3个子记录,AUS\u单元1AUS\u单元2,以及AUS\u单元3

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

COURSE_ID | COURSE_CODE
----------+------------
912689    | AUS_COURSE
912293    | AUS_UNIT1
912295    | AUS_UNIT2
912303    | AUS_UNIT3
我正在努力弄清楚要使用什么join和要加入哪个字段


非常感谢,

您可以使用
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

为此,您可以使用
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

您可以使用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))

您可以使用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))

我会选择子选择而不是加入

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)

我会选择子选择而不是加入

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)

没有必要从课程链接中选择两次。您确定吗?看起来他需要两列中的值当然,这是一个完全不同的方法。您的答案没有子选项,在大多数情况下可能更快。如果性能不是一个大问题,为了可读性,我更喜欢子选择。没有必要从课程链接中选择两次。你确定吗?看起来他需要两列中的值当然,这是一个完全不同的方法。您的答案没有子选项,在大多数情况下可能更快。如果性能不是一个大问题,为了可读性,我更喜欢子选择。