需要Oracle Query从具有1到多个关系的表中检索信息

时间:2013-09-18 18:51:19

标签: sql database oracle

我的表格信息类似于以下内容:

表A是电路列表:

Circuit  |  CktType  |  CktSize
--------------------------------
CKT1     |  ABC123   |  10
CKT2     |  ABC123   |  12
CKT3     |  XYZ789   |  10

表B是Raceway列表:

Raceway  |  RwyType  |  RwySize
--------------------------------
RWY1     |  C        |  4
RWY2     |  T        |  4x6
RWY3     |  T        |  8x12

表C列出了电路如何通过电缆管道:

Circuit  |  Sequence |  Raceway
--------------------------------
CKT1     |  1        |  RWY1
CKT1     |  2        |  RWY2
CKT1     |  3        |  RWY3
CKT2     |  1        |  RWY2

表C可能有也可能没有表A和表B中所有项目的条目。表C中没有表A和B中每个项目的设置编号或最大条目数。

我想在Oracle中编写2个查询以检索以下数据(显然查询非常相似,所以只是真正寻找帮助编写其中一个的帮助)。

电路经过的电缆管道的所有电路信息 结果所需:

Circuit  |  CktType  |  CktSize   |  Raceway
----------------------------------------------
CKT1     |  ABC123   |  10        | RWY1, RWY2, RWY3
CKT2     |  ABC123   |  12        | RWY2
CKT3     |  XYZ789   |  10        | (null)

所有赛道信息与赛道中的电路: 结果所需:

Raceway  |  RwyType  |  RwySize  |  Circuit
----------------------------------------------
RWY1     |  C        |  4        | CKT1
RWY2     |  T        |  4x6      | CKT1, CKT2
RWY3     |  T        |  8x12     | CKT1

提前致谢。

2 个答案:

答案 0 :(得分:1)

这将是您的两个查询之一。这会生成每个电路信息,然后用逗号分隔Raceway序列。检查出来。

  SELECT Circuit,
         CktType,
         CktSize,
         RTRIM (
            XMLAGG (XMLELEMENT (e, Raceway || ', ') ORDER BY Sequence).EXTRACT (
               '//text()'),
            ', ')
            Raceways
    FROM (SELECT t_A.Circuit,
                 t_A.CktType,
                 t_A.CktSize,
                 t_C.Raceway,
                 t_c.Sequence
            FROM    tableA t_A
                 LEFT OUTER JOIN
                    tableC t_C
                 ON t_A.Circuit = t_C.Circuit)
GROUP BY Circuit;

答案 1 :(得分:0)

编辑:重新阅读你的帖子后,我意识到这对你不起作用。试试“For XML PATH”。 这是一个很好的例子:sql-query-concatenating-results-into-one-string