繁体   English   中英

使用多个公用表表达式进行查询不起作用?

[英]Query with multiple common table expressions not working?

如果我使用两种常见的表表达式,一种是递归的,一种是简单的,它不起作用。 如果两者都很简单,它就可以工作(它在 HSQL 中,并且 Postgres 语法正在工作)

不工作

WITH RECURSIVE TEMP_TABLE1(NAME) AS 
(
    SELECT child FROM FAMILY where parent='HUMAUN'
    UNION
    SELECT CHILD FROM FAMILY,TEMP_TABLE WHERE PARENT=TEMP_TABLE.NAME
),
TEMP_TABLE2 AS 
(
     SELECT CHILD FROM FAMILY
)
   SELECT CHILD FROM TEMP_TABLE1,TEMP_TABLE2 
   WHERE TEMP_TABLE1.NAME=TEMP_TABLE2.NAME 

如果我将 temp_table1 设为简单的非递归,则工作

WITH TEMP_TABLE1(NAME) AS 
(
    SELECT child FROM FAMILY where parent='HUMAUN'
    UNION
    SELECT CHILD FROM FAMILY WHERE PARENT='XYZ'
),
TEMP_TABLE2(NAME) AS 
(
     SELECT CHILD FROM FAMILY
)
   SELECT NAME FROM TEMP_TABLE1,TEMP_TABLE2 
   WHERE TEMP_TABLE1.NAME=TEMP_TABLE2.NAME 

编辑:这不是问题的解决方案。 我不知道关键字RECURSIVE ,我将把它留在这里供后代使用。


我认为(但我不熟悉 hsqldb,只是 sql,尽管它适合您的错误消息)您的问题是您的递归 cte 的名称。 你能不能试试:

WITH RECURSIVE_TEMP_TABLE1(NAME) AS 
(
    SELECT child FROM FAMILY where parent='HUMAUN'
    UNION
    SELECT CHILD FROM FAMILY,RECURSIVE_TEMP_TABLE1 WHERE PARENT=TEMP_TABLE.NAME
)

请注意 cte 名称中的额外下划线。 此外,为了使它真正递归的底部部分union应选择本身,因此RECURSIVE_TEMP_TABLE1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM