![](/img/trans.png)
[英]Optimize or rewrite pivot query that uses multiple common table expressions
[英]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.