Solución:
Puede asignar un nombre o alias a una consulta con CTE (Expresiones de tabla comunes), también conocida como cláusula WITH, también conocida por Oracle como Factorización de subconsultas:
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;
No tengo una instancia de Oracle para probar, pero lo que publicó debe ser una sintaxis ANSI-89 JOIN válida. 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
Tu consulta debería 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;
No me sorprendería que Oracle reescribiera las consultas para que el plan fuera el mismo de todos modos.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)