2017-06-03 120 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