有一种方法,得到的子查询中的Oracle 11g的别名,如:

select * 
from
    (select client_ref_id, request from some_table where message_type = 1) abc,
    (select client_ref_id, response  from some_table where message_type = 2) defg
where
    abc.client_ref_id = def.client_ref_id;

否则是有办法加入基于所述client_ref_id两个子查询。我知道有一个自连接,但在数据库中,我在自我运行加入最多需要5分钟才能完成(有在我运行的实际查询一些额外的逻辑,但我已经决定自联接是什么东西导致此问题)。各个子查询只需要几秒钟,通过他们的自我完成。自连接查询看起来是这样的:

select st.request, st1.request
from
    some_table st, some_table st1
where 
    st.client_ref_id = st1.client_ref_id;
有帮助吗?

解决方案

WITH abc as (select client_ref_id, request from some_table where message_type = 1)
select * 
from abc
    inner join 
    (select client_ref_id, response  from some_table where message_type = 2) defg
on   abc.client_ref_id = def.client_ref_id;

其他提示

我没有一个Oracle实例与测试,但你贴什么应该是有效的ANSI-89连接语法。在这里它是在ANSI-92:

SELECT *
  FROM (SELECT client_ref_id, request 
          FROM SOME_TABLE 
         WHERE message_type = 1) abc
  JOIN (SELECT client_ref_id, request 
          FROM SOME_TABLE 
         WHERE message_type = 1) defg ON defg.client_ref_id = abc.client_ref_id

您的查询应该罚款。

另一种方法是:

select abc.client_ref_id, abc.request, def.response
from   some_table abc,
       some_table def
where  abc.client_ref_id = def.client_ref_id
and    abc.message_type = 1
and    def.message_type = 2;

我不会如果甲骨文改写了查询,以使计划将是相同的反正感到惊讶。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top