【发布时间】:2016-01-29 05:29:26
【问题描述】:
如果我使用两个公用表表达式,一个是递归的,一个是简单的,它不起作用。如果两者都很简单,它就可以工作(它在 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
【问题讨论】:
-
如果我在最后单独运行这些 temp_tables 并带有一个 select 语句,它工作正常..所以它们都返回数据并且彼此独立..
-
"not working" 不是有效的 HSQLDB 错误消息,也不是可接受的问题描述。
-
@a_horse_with_no_name 意思是 Unexpected token 'AS' required '(' ,在这一行提到 'TEMP_TABLE2(NAME) AS' ,错误代码 -5581
-
您使用的是哪个 HSQL 版本?
-
您的“递归”cte 不是递归的;它从
TEMP_TABLE而不是TEMP_TABLE1中选择
标签: sql database hsqldb common-table-expression