2011-06-23 114 views
0

我有兩個完全相同的佈局,但有不同的數據(一個是當前的,一個是歷史)的表。Oracle SQL - 從兩個表中選擇

如何從兩個表中提取信息?

PSUDO SQL:

SELECT 
    T.TRANS_QUAN, 
    P.PONO, D.ID 
FROM 
    TRANSLOG T, (select * from PO, PO_HIST) P, (SELECT * FROM PO_DETAIL, PO_DETAIL_HIST) D 
WHERE 
    D.PO_ID = P.ID 
    AND T.SOURCE_ID = D.ID 

當我嘗試實際運行,我得到 「列定義的含糊」

回答

2

你可以UNION子句。

嘗試:

SELECT 
     T.TRANS_QUAN, 
     P.PONO, D.ID 
    FROM 
     TRANSLOG T, 
      (
       SELECT * FROM PO 
       UNION 
       SELECT * FROM PO_HIST 
      ) P, 
     (
      SELECT * FROM PO_DETAIL 
      UNION 
      SELECT * FROM PO_DETAIL_HIST 
     ) D 
    WHERE 
     D.PO_ID = P.ID 
     AND T.SOURCE_ID = D.ID 
+2

如果沒有很好的理由,永遠不要使用UNION,如果你想添加記錄,總是使用UNION ALL – Benoit

+0

@Benoit:那麼當前的需求不是一個很好的理由嗎?當然,如果有相同的記錄不是問題,那麼使用UNION ALL可以使它更好 – Chandu

0
(select * from PO, PO_HIST) P 

此子查詢可能會使共享一個共同的列名錶的交叉連接。

也許你想:

Select t.trang_quan 
    , p.pono 
    , d.id 
    from translog t 
    inner join po_detail d 
    on d.id = t.source_id 
    cross join po_detail_hist 
    inner join po p 
    on p.id = d.po_id 
    cross join po_hist p2 

您確定要交叉連接一起?