Подтвердить что ты не робот

Можем ли мы иметь несколько "WITH AS" в одном sql - Oracle SQL

У меня был очень простой вопрос: позволяет ли оракулу несколько "WITH AS" в одном заявлении sql.

Пример:

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

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

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

Я могу заставить запрос работать, повторяя один и тот же запрос несколько раз, но не хочу этого делать и использовать "WITH AS". Это похоже на простое требование, но оракул не позволяет мне:

ORA-00928: отсутствует ключевое слово SELECT

4b9b3361

Ответ 1

Вы можете сделать это как:

WITH abc AS( select
             FROM ...)
, XYZ AS(select
         From abc ....) /*This one uses "abc" multiple times*/
  Select 
  From XYZ....   /*using abc, XYZ multiple times*/

Ответ 2

правильный синтаксис -

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;

Ответ 3

Да, вы можете...

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

Следуйте порядку, в котором он должен быть инициализирован в выражениях Common Table

Ответ 4

Aditya или другие, можете ли вы присоединиться или сопоставить t2 с t1 в вашем примере, то есть перевести на мой код,

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

Неясно, поддерживается ли только WHERE для присоединения или какой подход присоединения поддерживается внутри второго объекта WITH. Некоторые из примеров имеют ГДЕ A = B вниз в теле выбора "ниже" предложений WITH.

Ошибка, которую я получаю после этих объявлений WITH, - это идентификаторы (имена полей) в B, которые не распознаются, в теле остальной части SQL. Таким образом, синтаксис WITH работает нормально, но не имеет доступа к результатам из t2.