¿Podemos tener múltiples "CON AS" en un solo sql-Oracle SQL


Tenía una pregunta muy simple: Oracle permite múltiples "CON AS" en una sola instrucción sql.

Ejemplo:

WITH abc AS( select ......)

WITH XYZ AS(select ....) /*This one uses "abc" multiple times*/

Select ....   /*using XYZ multiple times*/

Puedo hacer que la consulta funcione repitiendo la misma consulta varias veces, pero no quiero hacer eso, y aprovechar "CON AS". Parece un requisito simple, pero oracle no me permite:

ORA-00928: falta la palabra clave SELECT

 56
Author: user1933888, 2013-10-29

4 answers

Puedes hacer esto como:

WITH abc AS( select
             FROM ...)
, XYZ AS(select
         From abc ....) /*This one uses "abc" multiple times*/
  Select 
  From XYZ....   /*using abc, XYZ multiple times*/
 100
Author: Deepshikha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-29 09:41:42

La sintaxis correcta es -

with t1
as
(select * from tab1
where conditions...
),
t2
as
(select * from tab2
where conditions...
(you can access columns of t1 here as well)
)
select * from t1, t2
where t1.col1=t2.col2;
 20
Author: Aditya Kakirde,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-29 09:42:49

Sí puedes...

WITH SET1 AS (SELECT SYSDATE FROM DUAL), -- SET1 initialised
     SET2 AS (SELECT * FROM SET1)        -- SET1 accessed
SELECT * FROM SET2;                      -- SET2 projected

10/29/2013 10:43:26 AM

Siga el orden en el que debe inicializarse en Expresiones de Tabla Comunes

 6
Author: SriniV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-08 15:46:27

Aditya u otros, puede unirse o emparejar t2 con t1 en su ejemplo, es decir, traducido a mi código,

with t1 as (select * from AA where FIRSTNAME like 'Kermit'),
     t2 as (select * from BB B join t1 on t1.FIELD1 = B.FIELD1)

No tengo claro si solo DÓNDE se admite para unirse, o qué enfoque de unión se admite dentro de la entidad 2nd WITH. Algunos de los ejemplos tienen el WHERE A = B down en el cuerpo de las cláusulas select "below" the WITH.

El error que estoy obteniendo siguiendo estos CON declaraciones es que los identificadores (nombres de campo) en B no se reconocen, abajo en el cuerpo de la resto del SQL. Así que la sintaxis WITH parece funcionar bien, pero no puede acceder a los resultados de t2.

 3
Author: Dave,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-10-12 23:18:35