【问题标题】:Oracle SQL join subquery dblinkOracle SQL 连接子查询 dblink
【发布时间】:2017-06-03 01:16:07
【问题描述】:

子查询连接返回错误,找不到子查询表。感谢任何帮助!

我有两张桌子。一种是正常的。 ops_owner.track_mail_item。 另一个是 dblink(不确定它是如何工作的,但我按照它的工作原理运行

SELECT TRUNC(event_date,'HH24'),
        tmi_uid
    FROM TRACK_OWNER.TRACKING_DETAIL@dblink_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 和 event_id)。我想运行子查询以使 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 TRACK_OWNER.TRACKING_DETAIL@dblink_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');

我非常感谢任何帮助。

【问题讨论】:

  • 您的子查询没有返回日期字段...应该选择 trunc... 作为 event_date 或其他别名,然后更改您的主查询 m.

标签: sql oracle join subquery


【解决方案1】:

这是m 的子查询:

(SELECT TRUNC(event_date,'HH24'), tmi_uid
  FROM TRACK_OWNER.TRACKING_DETAIL@dblink_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 TRACK_OWNER.TRACKING_DETAIL@dblink_track 
 WHERE event_id ='158' AND
      event_date >= date '2017-04-01' AND
      event_date < date '2017-05-01'
) m

【讨论】:

    猜你喜欢
    • 2017-03-15
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    • 2013-09-14
    • 2012-12-09
    • 1970-01-01
    相关资源
    最近更新 更多