【问题标题】:SQL join for parent and child records in a link table链接表中父子记录的 SQL 连接
【发布时间】:2016-03-28 20:08:33
【问题描述】:

我正在努力创建一个在单个查询中返回父记录和子记录的 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_LINKS

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

所以你可以在我的链接表中看到 AUS_COURSE 有 3 个子记录,AUS_UNIT1AUS_UNIT2AUS_UNIT3强>

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

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

我正在努力弄清楚要使用什么联接以及要加入哪个字段

非常感谢,

【问题讨论】:

    标签: sql oracle join


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      我会选择子选择而不是连接。

      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)
      

      【讨论】:

      • 不需要从 course_links 中选择两次。
      • 你确定吗?看起来他需要 COURSE_LINKS 两列中的值。
      • 嗯,这是一种完全不同的方法。您的答案没有子选择,并且在大多数情况下可能更快。如果性能不是大问题,我更喜欢子选择以提高可读性。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-17
        • 2011-12-25
        • 1970-01-01
        • 2019-07-16
        • 1970-01-01
        • 2017-07-22
        • 1970-01-01
        • 2023-04-02
        相关资源
        最近更新 更多