数据库
db2的
方案
我必须得到ID
和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
或尽可能简化查询。
答案 0 :(得分:0)
https://www.ibm.com/support/knowledgecenter/en/SSEPEK_10.0.0/apsg/src/tpc/db2z_createcte.html说:
您可以在CREATE VIEW语句中的fullselect之前使用公用表表达式。如果需要在多个查询中使用公用表表达式的结果,则此方法很有用。
我读到这意味着除非您创建视图,否则只能在您定义它的查询中使用CTE。