2017-02-14 46 views
1

我想UNION兩個列:ORACLE-爲什麼WHERE子句不適用於UNION?

T1.STATUS, T8.REASON in one column , WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE

但是當我添加WHERE子句兩個表的UNION它顯示錯誤:

ORA-00904: "T8"."ENTRY_DATE": invalid identifier

這是我的查詢:

SELECT * FROM 
(
    SELECT T1.OUTLET_ID,T1.STATUS,T1.ENTRY_DATE FROM T_ORDER_DETAIL T1 
    UNION 
    SELECT T8.OUTLET_ID,T8.REASON,T8.ENTRY_DATE FROM T_NON_PRODUCTIVE_SALES T8 
) 
WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE 

問題在哪裏?

+2

你能描述你在這裏想要做什麼嗎? –

+1

正在做什麼?可能應該是JOIN而不是UNION。 – Serg

+0

添加一些示例表格數據和預期結果 - 以及格式化文本。 – jarlh

回答

1

你可以返工這樣的查詢:

SELECT * 
    FROM (
SELECT T1.OUTLET_ID id, 
     T1.STATUS res, 
     T1.ENTRY_DATE dt 
    FROM T_ORDER_DETAIL T1, 
     T_NON_PRODUCTIVE_SALES T8 
    WHERE T1.OUTLET_ID = T8.OUTLET_ID 
    AND T1.ENTRY_DATE = T8.ENTRY_DATE 
    UNION 
SELECT T8.OUTLET_ID id, 
     T8.REASON res, 
     T8.ENTRY_DATE dt 
    FROM T_ORDER_DETAIL T1, 
     T_NON_PRODUCTIVE_SALES T8 
    WHERE T1.OUTLET_ID = T8.OUTLET_ID 
    AND T1.ENTRY_DATE = T8.ENTRY_DATE); 
+0

是的!!!它工作!謝謝sooo多! –

0

你的子查詢只給出一個結果集,因此你不能像JOIN那樣。而改變你的查詢像

SELECT T1.OUTLET_ID,T1.STATUS,T1.ENTRY_DATE, 
T8.OUTLET_ID,T8.REASON,T8.ENTRY_DATE AS T8_ENTRY_DATE 
FROM T_ORDER_DETAIL T1 
JOIN T_NON_PRODUCTIVE_SALES T8 
ON T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE; 
0

,您應該使用INNER JOIN代替UNION:

SELECT 
    t1.outlet_id, t1.status, t8.status, t1.entry_date 
FROM 
    t_order_detail t1 
INNER JOIN 
    t_non_productive_sales t8 
ON t1.outlet_id = t8.outlet_id 
    AND t1.entry_date = t8.entry_date; 
1
SELECT * FROM 
(
    SELECT T1.OUTLET_ID,T1.STATUS,T1.ENTRY_DATE FROM T_ORDER_DETAIL T1 
    UNION 
    SELECT T8.OUTLET_ID,T8.REASON,T8.ENTRY_DATE FROM T_NON_PRODUCTIVE_SALES T8 
) 
WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE 

當你執行你的查詢,子查詢返回列名爲OUTLET_ID ,STATUS ,ENTRY_DATE的記錄表。所以總之,你會得到一個table這些列。

在外部查詢當你寫的條件

WHERE T1.OUTLET_ID = T8.OUTLET_ID AND T1.ENTRY_DATE = T8.ENTRY_DATE

甲骨文亙古不明白什麼T1T8。因爲外部查詢將子查詢的結果視爲table。而且沒有這樣的名字給你的表,所以它給出了錯誤。正如其他人早些時候所解釋的那樣,您可以加入並解決您的問題。

相關問題