Frage

Gibt es eine Möglichkeit, eine Unterabfrage in Oracle 11g einen Aliasnamen zu geben, wie:

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;

Ansonsten ist es eine Möglichkeit, die beiden Unterabfragen zu verbinden auf der client_ref_id basiert. Ich weiß, es ist ein Selbst beitreten, aber auf der Datenbank, die ich auf einem selbst leite beitreten kann bis zu 5 Minuten in Anspruch nehmen (es gibt einige zusätzliche Logik in der aktuellen Abfrage bei mir läuft, aber ich habe das selbst bestimmt kommen wird, was das Problem verursacht). Die einzelnen Unterabfragen nehmen nur wenige Sekunden von ihnen selbst zu vollenden. Die Self-Join-Abfrage sieht so etwas wie:

select st.request, st1.request
from
    some_table st, some_table st1
where 
    st.client_ref_id = st1.client_ref_id;
War es hilfreich?

Lösung

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;

Andere Tipps

Ich habe nicht eine Oracle-Instanz Test haben mit, aber was Sie auf dem Laufenden gültige ANSI-89 JOIN-Syntax sein sollte. Hier ist es in 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

Ihre Abfrage sollte in Ordnung sein.

Eine Alternative wäre:

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;

ich würde nicht überrascht sein, wenn Oracle die Abfragen neu geschrieben, so dass der Plan die gleichen ohnehin sei.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top