【问题标题】:Error when joining CTEs加入 CTE 时出错
【发布时间】:2016-04-23 15:48:12
【问题描述】:

我有 2 个 CTE。当我尝试加入他们时,我收到一条错误消息“ORA-01789:”。我如何合并 2 个 CTE。还有其他方法可以获得所需的结果吗?

WITH IMPORT_CTE 
AS  ((select A.*
FROM IMPORT_REGISTRY_ERROR_LOG_1 A
INNER JOIN (select distinct POD_ID,CONFLICTED_POD_ID,ERROR_CODE
             FROM IMPORT_REGISTRY_ERROR_LOG_1 
             GROUP BY POD_ID,CONFLICTED_POD_ID,ERROR_CODE
             HAVING COUNT(*) > 1) B
on  A.POD_ID = B.POD_ID AND A.CONFLICTED_POD_ID = B.CONFLICTED_POD_ID AND A.ERROR_CODE = B.ERROR_CODE  ) order by a.pod_id desc)
select t1.*
from IMPORT_CTE t1
where t1.insert_date =(select max(t2.insert_date)
                        from IMPORT_CTE t2
                       where t2.POD_ID =t1.POD_ID)


WITH IMPORT_CTE1 
AS  ((select A.*
FROM IMPORT_REGISTRY_ERROR_LOG_1 A
INNER JOIN (select distinct POD_ID,CONFLICTED_POD_ID,ERROR_CODE
             FROM IMPORT_REGISTRY_ERROR_LOG_1 
             GROUP BY POD_ID,CONFLICTED_POD_ID,ERROR_CODE
             HAVING COUNT(*) > 1) B
on  A.POD_ID = B.POD_ID AND A.CONFLICTED_POD_ID = B.CONFLICTED_POD_ID AND A.ERROR_CODE = B.ERROR_CODE  ) order by a.pod_id desc)
select t1.insert_date 
from IMPORT_CTE1 t1
where t1.insert_date =(select min(t2.insert_date)
                        from IMPORT_CTE1 t2
                       where t2.POD_ID =t1.POD_ID)

【问题讨论】:

  • 你忘了告诉你想要的结果
  • 你是如何加入他们的?
  • @Prdp 期望的结果是加入两个查询。但我无法使用联合加入,因为两个查询中获取的列数不同
  • @AlexPoole 我尝试使用 union all 加入,但它不起作用
  • 据我所见,CTE 是相同的,所以您想要一个针对 CTE 的单一查询,它将您现在拥有的两个联合起来 - 这样您就可以得到最小和最大日期?关于列数的错误似乎很清楚。但是,您为什么要使用工会来做这件事呢?

标签: oracle join


【解决方案1】:

您在每个查询中都有一组额外的括号。第一个显然应该是:

WITH IMPORT_CTE AS
      (select A.*
         FROM IMPORT_REGISTRY_ERROR_LOG_1 A
         INNER JOIN (select distinct POD_ID,CONFLICTED_POD_ID,ERROR_CODE
                       FROM IMPORT_REGISTRY_ERROR_LOG_1 
                       GROUP BY POD_ID,CONFLICTED_POD_ID,ERROR_CODE
                       HAVING COUNT(*) > 1) B
           on A.POD_ID = B.POD_ID AND
              A.CONFLICTED_POD_ID = B.CONFLICTED_POD_ID AND
              A.ERROR_CODE = B.ERROR_CODE
         order by a.pod_id desc)
select t1.*
  from IMPORT_CTE t1
  where t1.insert_date = (select max(t2.insert_date)
                            from IMPORT_CTE t2
                            where t2.POD_ID = t1.POD_ID)

第二个也有类似的问题。

祝你好运。

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 2014-05-13
    • 2018-06-26
    • 1970-01-01
    • 2012-04-25
    • 2021-03-24
    • 1970-01-01
    • 2020-06-08
    • 1970-01-01
    相关资源
    最近更新 更多