Существует ли способ дать подзапросу псевдоним в Oracle 11 г SQL?

Есть ли способ дать подзапрос в Oracle 11 г за псевдоним как:

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;
14
задан OMG Ponies 17 June 2010 в 00:12
поделиться

3 ответа

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;
22
ответ дан 1 December 2019 в 09:00
поделиться

С вашим запросом все в порядке.

Альтернативой может быть:

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;

Я не удивлюсь, если Oracle переписывает запросы так, чтобы план в любом случае остался прежним.

3
ответ дан 1 December 2019 в 09:00
поделиться

У меня нет экземпляра 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
5
ответ дан 1 December 2019 в 09:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: