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

时间:2015-10-29 07:16:12

标签: sql database hsqldb common-table-expression

如果我使用两个公用表表达式,一个是递归的,一个是简单的,它不起作用。如果两者都很简单就可以了(它在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 

1 个答案:

答案 0 :(得分:0)

编辑:这不是问题的解决方案。我不知道关键字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