从递归查询错误中查看

Posted

技术标签:

【中文标题】从递归查询错误中查看【英文标题】:view from recursive query error 【发布时间】:2018-08-28 07:10:18 【问题描述】:

我有一个运行良好的递归查询:

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

我正在通过一个未指定的 ERP 系统访问 MS SQL 服务器。是 ERP 限制,还是我的查询有问题?

代码中是否有任何解决方法,我可以尝试?

谢谢。

编辑:Microsoft SQL Server 2012 (SP1) 没有 ; 的错误 156 as with 错误 102 ;在 as ;with cte 之间

【问题讨论】:

trought an unspecified ERP system - 它是否允许任何 DDL? 没有人能读懂你的想法或看到你的屏幕。您说“通过未指定的 ERP 系统访问……”。这到底是什么意思呢?您可以使用 SSMS 创建视图吗?并发布生成错误的完整 sql 语句以及视图创建语句(如果这不是错误的来源)。最后提供 COMPLETE 错误消息 - 它的每一点。 如果这是您的整个查询,那么它一定是您的 ERP 的某种错误/限制。此代码似乎有效。 【参考方案1】:

这是 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 ...)

【讨论】:

以上是关于从递归查询错误中查看的主要内容,如果未能解决你的问题,请参考以下文章

SQL递归查询知多少

SQL:如何从递归查询创建视图?

MySQL怎样做递归查询

从多个 OU 中递归查询用户的 LDAP 角色

mysql递归查询

SQL Server CTE 递归查询全解