使用具有多个语句的单个公用表表达式
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用具有多个语句的单个公用表表达式相关的知识,希望对你有一定的参考价值。
数据库
DB2
脚本
我必须得到ID
s和DELETE FROM...
两个表的列表。我从CTE获得所有ID
,但我只能在一个DELETE
声明中使用它。我必须再次查询CTE以获得其他DELETE
。
现行解决方案
-- GET A LIST OF ALL CHILDREN OF A NODE, INCLUDING A NODE
WITH NODE_LIST (ID) AS
(
-- CHILDREN
SELECT n.ID FROM NODE n WHERE n.ID = '8ae433156f7f4469857e7de205ec4fe0'
UNION ALL
SELECT n.ID FROM NODE n, NODE_LIST nl WHERE nl.ID = n.PARENT
)
SELECT COUNT (*) FROM OLD TABLE(
DELETE FROM FIRST_NODE_TABLE ns WHERE EXISTS (SELECT * FROM NODE_LIST nl WHERE nl.ID = ns.CHILD OR nl.ID = ns.PARENT)
);
WITH NODE_LIST (ID) AS
(
SELECT n.ID FROM NODE n WHERE n.ID = '8ae433156f7f4469857e7de205ec4fe0'
UNION ALL
SELECT n.ID FROM NODE n, NODE_LIST nl WHERE nl.ID = n.PARENT
)
SELECT COUNT (*) FROM OLD TABLE(
DELETE FROM SECOND_NODE_TABLE n WHERE EXISTS (SELECT * FROM NODE_LIST nl WHERE nl.ID = n.ID)
);
请求
我想只有一个NODE_LIST
或尽可能简化查询。
答案
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/apsg/src/tpc/db2z_createcte.html说:
您可以在CREATE VIEW语句中的fullselect之前使用公用表表达式。如果需要在多个查询中使用公用表表达式的结果,则此方法很有用。
我读到这意味着除非您创建视图,否则只能在定义它的查询中使用CTE。
以上是关于使用具有多个语句的单个公用表表达式的主要内容,如果未能解决你的问题,请参考以下文章