Можем ли мы иметь несколько "с AS" в одном sql-Oracle SQL
У меня был очень простой вопрос: позволяет ли oracle несколько "с AS" в одном операторе sql.
пример:
WITH abc AS( select ......)
WITH XYZ AS(select ....) /*This one uses "abc" multiple times*/
Select .... /*using XYZ multiple times*/
Я могу заставить запрос работать, повторяя один и тот же запрос несколько раз, но не хочу этого делать и использовать "с AS". Это кажется простым требованием, но oracle не позволяет мне:
ORA-00928: отсутствует ключевое слово SELECT
4 ответа:
вы можете сделать это так:
WITH abc AS( select FROM ...) , XYZ AS(select From abc ....) /*This one uses "abc" multiple times*/ Select From XYZ.... /*using abc, XYZ multiple times*/
синтаксис -
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;
Да, вы можете...
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
следуйте порядку, в котором он должен быть инициализирован в общих табличных выражениях
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)
мне не ясно, поддерживается ли только где для присоединения, или какой подход присоединения поддерживается в пределах 2-го с сущностью. Некоторые из примеров имеют WHERE a=B вниз в теле select "below" предложения WITH.
ошибка, которую я получаю после этих объявлений, - это идентификаторы (имена полей) в B не распознаются, вниз в теле остальной части SQL. Таким образом, синтаксис WITH, похоже, работает нормально, но не может получить доступ к результатам из t2.