Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/google-maps/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
对多个值重复执行SQL CTE_Sql_Sql Server_Common Table Expression_Recursive Query - Fatal编程技术网

对多个值重复执行SQL CTE

对多个值重复执行SQL CTE,sql,sql-server,common-table-expression,recursive-query,Sql,Sql Server,Common Table Expression,Recursive Query,我的问题是,我在SQL中有这个函数式CTE语句。为我的id=13的机构找到深层次的层次结构就像一个魅力 现在我想让它给我一个多ID的结果(更具体地说是树中的所有叶子) 查找所有叶片的声明在CTE下方说明 这能做到吗?或者我需要为每个ID从代码运行查询吗 WITH parents AS ( SELECT id, name, parent_id, 0 AS relative_depth FROM agencies where id = 13 UNION ALL SELECT

我的问题是,我在SQL中有这个函数式CTE语句。为我的id=13的机构找到深层次的层次结构就像一个魅力

现在我想让它给我一个多ID的结果(更具体地说是树中的所有叶子)

查找所有叶片的声明在CTE下方说明

这能做到吗?或者我需要为每个ID从代码运行查询吗

WITH parents AS (
  SELECT id, name, parent_id,  0 AS relative_depth
  FROM agencies
  where id = 13

  UNION ALL

  SELECT cat.id, cat.name, cat.parent_id, p.relative_depth - 1
  FROM agencies cat, parents p
  WHERE cat.id = p.parent_id
)
SELECT parents.id, parents.name as agency, parents.relative_depth FROM parents
id=13的输出示例:

id   name   relative_depth
13   D       0
12   C      -1
8    B      -2
2    A      -3
id=11的输出示例:

id   name   relative_depth
11   E      0
2    A      -1
所以对于我从下面的陈述中得到的4片叶子

声明:

SELECT id
FROM   agencies t
WHERE  NOT EXISTS (SELECT 1
                   FROM   agencies
                   WHERE  parent_id = t.id)  
我想得到这样的结果:

leaf   id   name   relative_depth
 13    13   D       0
 13    12   C      -1
 13     8   B      -2
 13     2   A      -3
 11    11   E       0
 11     2   A      -2
  .     .   .       .
  .     .   .       .

/亲切问候

为您做了类似的工作,您可以在
leaf
字段中保留顶级
id
,然后在您的最终
选择中指定
leaf
标准:

WITH parents AS (
  SELECT id leaf, id, name, parent_id,  0 AS relative_depth
  FROM agencies

  UNION ALL

  SELECT p.leaf, cat.id, cat.name, cat.parent_id, p.relative_depth - 1
  FROM agencies cat, parents p
  WHERE cat.id = p.parent_id
)

SELECT leaf, parents.id, parents.name as agency, parents.relative_depth
FROM parents
WHERE leaf IN (11, 13)
这不管用吗

WITH parents AS (
  SELECT id, name, parent_id,  0 AS relative_depth
  FROM agencies
  where parent_id is null

  UNION ALL

  SELECT cat.id, cat.name, cat.parent_id, p.relative_depth - 1
  FROM agencies cat, parents p
  WHERE cat.id = p.parent_id
)
SELECT parents.id, parents.name as agency, parents.relative_depth FROM parents

我使用树上的所有根(没有父节点的节点)作为递归CTE的种子,因此您应该到达所有叶子。

请参阅。请发布一些示例输入和预期输出。如果您想要所有ID,为什么不删除ID=2的
?另外,请在1992年以后加入我们:Larnu:删除'where id=2'不会给出每个叶节点的层次关系。Thx!然后我可以在in()部分中添加叶子选择作为内部选择