有没有办法在Oracle 11g SQL中为子查询提供别名?

Mat*_*coe 14 sql oracle subquery oracle11g table-alias

有没有办法在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;
Run Code Online (Sandbox Code Playgroud)

否则,有一种方法可以基于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;
Run Code Online (Sandbox Code Playgroud)

jmo*_*eno 22

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;

  • @SeaBass:通用表格表达式,通常缩写为CTE(也经常用作名称/别名,虽然我这次不这样做).请注意,两个"表"都可以作为CTE的一部分完成,我只是想显示两个选项,所以一个方向,另一个,另一个. (2认同)

OMG*_*ies 5

我没有要测试的Oracle实例,但是您发布的内容应该是有效的ANSI-89 JOIN语法.这是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
Run Code Online (Sandbox Code Playgroud)