Pregunta

¿Hay una manera de dar una sub consulta en Oracle 11g como un alias:

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;

De lo contrario hay una manera de unir las dos sub consultas basadas en el client_ref_id. Me di cuenta que es un auto unirse, pero en la base de datos Estoy corriendo en un auto combinación puede tardar hasta 5 minutos para completar (hay cierta lógica adicional en la consulta real Estoy corriendo pero he determinado la propia unión es lo que es la causa del problema). Las sub consultas individuales sólo tienen unos pocos segundos para completar por ellos mismos. El auto se unen a las miradas de consulta algo como:

select st.request, st1.request
from
    some_table st, some_table st1
where 
    st.client_ref_id = st1.client_ref_id;
¿Fue útil?

Solución

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;

Otros consejos

No tengo una instancia de Oracle a prueba con, pero lo que debería ser informados ANSI-89 válida la sintaxis de combinación. Aquí está en 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

Su consulta debe estar bien.

Una alternativa sería:

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;

Me no se sorprenda si Oracle volvió a escribir las consultas para que el plan sería el mismo de todos modos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top