представление из ошибки рекурсивного запроса - PullRequest
0 голосов
/ 28 августа 2018

У меня есть рекурсивный запрос, который прекрасно работает:

with cte as (
         select ps.SetProduct from PRODSET ps
         left join PRODUCT pr on pr.Product= ps.Product
         where ...

         union all

         select ps.SetProduct from PRODSET ps
         inner join cte on ps.Product= cte.SetProduct
         )

select distinct cte.SetProduct from cte

Добавление «создать представление» приводит к ошибке «Неверный синтаксис рядом с ключевым словом« SET »» в последней строке. Я даже не пользуюсь SET.

Весь код:

create view wiev_product as

with cte as (
         select ps.SetProduct from PRODSET ps
         left join PROD pr on pr.Product= ps.Product
         where ...

         union all

         select ps.SetProduct from PRODSET ps
         inner join cte on ps.Product= cte.SetProduct
         )

select distinct cte.SetProduct from cte

Я обращаюсь к серверу MS SQL с неопределенной системой ERP. Это ограничение ERP или что-то не так с моим запросом?

Есть ли какой-нибудь обходной путь в коде, который я мог бы попробовать?

Спасибо.

Редактировать: Microsoft SQL Server 2012 (SP1) Ошибка 156 без; as with Ошибка 102 с; между как; cte

1 Ответ

0 голосов
/ 11 сентября 2018

Это было ограничение ERP. Вместо того, чтобы создавать представление из cte и затем использовать это представление во втором запросе в качестве условия, мне удалось сделать все это в одном запросе с двумя cte.

with cte1 as (
         select ps.SetProduct from PRODSET ps
         left join PRODUCT pr on pr.Product= ps.Product
         where ...

         union all

         select ps.SetProduct from PRODSET ps
         inner join cte on ps.Product= cte.SetProduct
         ),

    cte2 as (
         select ps.SetProduct from PRODSET ps
         left join PRODUCT pr on pr.Product= ps.Product
         where ...

         union all

         select ps.SetProduct from PRODSET ps
         inner join cte on ps.Product= cte.SetProduct
         )

select distinct cte1.SetProduct from cte1
where cte1.SetProduct not in (select ... from cte2 where ...)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...