我正在嘗試在以下場景中創建查詢。

憑借我的技能,我能夠單獨加入表 A、A1、B 和 A、A1、C 和 A、A1、D 并將它們合并。
有沒有更好的方法來實作相同的目標。我使用 Oracle 作為資料庫。
uj5u.com熱心網友回復:
當我讀到你的問題時,我的第一個想法是聯盟。不過,為簡單起見,您可以先創建一個視圖,然后將其加入其他表:
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;
uj5u.com熱心網友回復:
這完全取決于它們的含義以及您是否需要知道值來自的列。
這將獲得所有列,您將獲得NULL來自非匹配 B、C、D 表的值:
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
uj5u.com熱心網友回復:
您可以嘗試使用“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;
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/371566.html
標籤:sql 甲骨文 表现 甲骨文11g oracle-sqldeveloper
上一篇:列印流程檔案為表格添加邊框
下一篇:如果存在2條記錄,則選擇2條記錄
