多个 table 通过单列连接到 table

Multiple tables joined to a table via single column

我正在尝试在以下情况下创建查询。

凭借我的技能,我能够加入 Table A、A1、B 和 A、A1、C 和 A、A1、D 并单独合并它们。

有没有更好的方法来达到同样的效果。我正在使用 Oracle 作为数据库。

当我读到你的问题时,我的第一个想法是联合。不过,为简单起见,您可以先创建一个视图,然后将其加入其他 table(s):

create view v_ext as
  select b.extid, b.pqr_col, b.qrs_col from b
  union all
  select c.extid, c.abc_col, c.bcd_col from c
  union all
  select d.extid, d.xyz_col, d.yza_col from d;
  
select *
from a join a1 on a.id = a1.aid
       join v_ext v on v.extid = a.extid;

您可以尝试使用 'with' 子句进行查询。像下面这样的东西,虽然我还没有测试过

with union_output as
  ( select b.extid, b.pqr_col, b.qrs_col from b
    union
    select c.extid, c.abc_col, c.bcd_col from c
    union
    select d.extid, d.xyz_col, d.yza_col from d) 
select *
from a join a1 on a.id = a1.aid
       join union_output uo on uo.extid = a.extid;
Select *from tableA A
Inner join tableA1 A1 on A1.A1ID=A.AID 
Inner join tableB b on b.ExtID=A.ExtID
Inner join tableC c on c.ExtID=A.ExtID
Inner join tableD d on d.ExtID=A.ExtID

这完全取决于它们的含义以及您是否需要知道这些值来自的列。

这将获取所有列,并且您将从不匹配的 B、C、D 表中获得 NULL 个值:

SELECT *
FROM   a1
       INNER JOIN a ON a1.aid = a.id
       LEFT OUTER JOIN b ON a.extid = b.extid
       LEFT OUTER JOIN c ON a.extid = c.extid
       LEFT OUTER JOIN d ON a.extid = d.extid

或者,这将只获取相关值并在较少的列中为您提供它们所属的类型:

SELECT *
FROM   a1
       INNER JOIN a ON a1.aid = a.id
       INNER JOIN (
         SELECT extid, 'B' AS type, pqr_col AS col1, qrs_col AS col2 FROM b
         UNION ALL
         SELECT extid, 'C', abc_col, bcd_col FROM c
         UNION ALL
         SELECT extid, 'D', xyz_col, yza_col FROM d
       ) bcd
       ON a.extid = bcd.extid