Question

Y at-il un moyen de donner une sous-requête dans Oracle 11g un alias comme:

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;

est le cas contraire, un moyen de joindre les deux sous-requêtes basées sur la client_ref_id. Je sais qu'il ya une jointure réflexive, mais sur la base de données que je suis en cours d'exécution sur une jointure réflexive peut prendre jusqu'à 5 min complète (il y a une certaine logique supplémentaire dans la requête réelle que je suis en cours d'exécution mais j'ai déterminé la jointure réflexive est ce qui est l'origine du problème). Les sous-requêtes individuelles ne prennent que quelques secondes pour terminer par eux-mêmes. La jointure réflexive ressemble requête quelque chose comme:

select st.request, st1.request
from
    some_table st, some_table st1
where 
    st.client_ref_id = st1.client_ref_id;
Était-ce utile?

La solution

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;

Autres conseils

Je n'ai pas une instance Oracle pour tester avec, mais ce que vous avez publié devrait être ANSI-89 valide la syntaxe JOIN. Ici, il 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

Votre requête doit être bien.

Une autre solution serait:

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;

Je ne serais pas surpris si Oracle a réécrit les requêtes afin que le plan serait le même de toute façon.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top