2017-06-03 84 views
0

子查詢連接返回錯誤,找不到子查詢表。感謝任何幫助!Oracle SQL連接子查詢dblink

我有兩個表。一個是正​​常的。 ops_owner.track_mail_item。 另一個是DBLINK(不知道是如何工作的,但我跑得以下它的工作原理

SELECT TRUNC(event_date,'HH24'), 
     tmi_uid 
    FROM [email protected]_track 
    WHERE event_id ='158' 
    AND event_date BETWEEN to_date('04/01/2017 12:00:01 AM', 'MM/DD/YYYY HH12:MI:SS AM') AND to_date('04/30/2017 11:59:59 PM', 'MM/DD/YYYY HH12:MI:SS PM') 

因爲dblink的表有多個列鍵(tmi_uid和事項標識)。我想運行子查詢,使tmi_uid關鍵這樣我就可以使用,後來然而,當我運行以下的錯誤是

ORA-00904: 「M」 「EVENT_DATE」:無效的標識符 00904. 00000 - 。 「%S:無效的標識符」 *原因:
*操作:錯誤在行:21列:6「

SELECT i.originfacilitycode, 
     i.zip5, 
     TRUNC(i.receivedate,'HH24'), 
     TRUNC(m.event_date,'HH24'), 
     COUNT(i.tmi_uid) 
FROM ops_owner.track_mail_item i 
inner join (SELECT TRUNC(event_date,'HH24'), 
    tmi_uid 
FROM [email protected]_track 
WHERE event_id ='158' 
    AND event_date BETWEEN to_date('04/01/2017 12:00:01 AM', 'MM/DD/YYYY HH12:MI:SS AM') AND to_date('04/30/2017 11:59:59 PM', 'MM/DD/YYYY HH12:MI:SS PM') 
    ) m 
    ON i.tmi_uid  = m.tmi_uid 
    WHERE I.PRODUCT_ID IN (81, 82, 83, 36) 
    AND I.RECEIVEDATE BETWEEN to_date('04/01/2017 00:00:01', 'MM/DD/YYYY HH24:MI:SS') AND to_date('04/30/2017 23:59:59', 'MM/DD/YYYY HH24:MI:SS') 
    AND i.lasteventcountry = 'US' 
    AND i.zip3 NOT  IN ('006', '007', '008', '009', '090', '091', '092', '093', '094', '095', '096', '097', '098', '340', '962', '963', '964', '965', '966', '967', '968', '969', '995', '996', '997', '998', '999') 
GROUP BY  i.originfacilitycode, 
     i.zip5, 
     TRUNC(i.receivedate,'HH24'), 
     TRUNC(m.event_date,'HH24'); 

我真的很感謝任何幫助。

+0

你的子查詢沒有返回的日期字段...應該是選擇TRUNC ......作爲EVENT_DATE或不同的別名,然後改變你的主查詢米 maSTAShuFu

+0

謝謝。有用。 –

回答

1

這是你的m子查詢:

(SELECT TRUNC(event_date,'HH24'), tmi_uid 
    FROM [email protected]_track 
WHERE event_id ='158' AND 
     event_date BETWEEN to_date('04/01/2017 12:00:01 AM', 'MM/DD/YYYY HH12:MI:SS AM') AND to_date('04/30/2017 11:59:59 PM', 'MM/DD/YYYY HH12:MI:SS PM') 
) m 

它沒有名字的第一個欄,所以你不能指它在外部查詢。您還可以簡化日期計算,所以:

(SELECT TRUNC(event_date,'HH24') as event_date, tmi_uid 
FROM [email protected]_track 
WHERE event_id ='158' AND 
     event_date >= date '2017-04-01' AND 
     event_date < date '2017-05-01' 
) m