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