有没有办法在 Oracle 11g SQL 中给子查询一个别名? [英] Is there a way to give a subquery an alias in Oracle 11g SQL?

查看:62
本文介绍了有没有办法在 Oracle 11g SQL 中给子查询一个别名?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有没有办法给 Oracle 11g 中的子查询一个别名,例如:

Is there a way to give a subquery in Oracle 11g an alias like:

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 分钟才能完成(我正在运行的实际查询中有一些额外的逻辑,但我已经确定自联接是什么导致问题).单个子查询只需几秒钟即可自行完成.自连接查询类似于:

Otherwise is there a way to join the two subqueries based on the client_ref_id. I realize there is a self join, but on the database I am running on a self join can take up to 5 min to complete (there is some extra logic in the actual query I am running but I have determined the self join is what is causing the issue). The individual subqueries only take a few seconds to complete by them selves. The self join query looks something like:

select st.request, st1.request
from
    some_table st, some_table st1
where 
    st.client_ref_id = st1.client_ref_id;

推荐答案

您可以使用 CTE (Common Table Expressions) aka WITH 子句 aka by Oracle as Subquery Factoring 为查询指定名称或别名:

You can give a query a name or alias with CTE’s (Common Table Expressions) aka WITH clause aka by Oracle as Subquery Factoring:

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 11g SQL 中给子查询一个别名?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆