Arrays PostgreSQL并行运行查询
我正在尝试创建一个查询/视图,它对一组主题执行层次结构计算,并在3代内返回公共祖先。我已经成功地运行了一个单一的主题,在一个时间,并希望能够做到这一点,在一个完整的表。下面是相关的子查询,当执行时,它返回来自任何受试者兄弟姐妹的共同祖先返回父代,期望的结果是这将在每个受试者的共同祖先上运行一个近交个体。如何输入多个值,对各个值运行查询,然后检索追溯到原始输入的多个单独输出Arrays PostgreSQL并行运行查询,arrays,postgresql,window-functions,recursive-query,Arrays,Postgresql,Window Functions,Recursive Query,我正在尝试创建一个查询/视图,它对一组主题执行层次结构计算,并在3代内返回公共祖先。我已经成功地运行了一个单一的主题,在一个时间,并希望能够做到这一点,在一个完整的表。下面是相关的子查询,当执行时,它返回来自任何受试者兄弟姐妹的共同祖先返回父代,期望的结果是这将在每个受试者的共同祖先上运行一个近交个体。如何输入多个值,对各个值运行查询,然后检索追溯到原始输入的多个单独输出 WITH d1 AS ( WITH RECURSIVE nodes(sub, parentid, parentname
WITH d1 AS (
WITH RECURSIVE nodes(sub, parentid, parentname, childid, childname, path, depth) AS (
SELECT cats.dbid AS sub,
r.parentid,
p1.subject,
r.childid,
p2.subject,
ARRAY[r.parentid] AS "array",
1
FROM pedigree_search r,
pedigree p1,
pedigree p2,
cats
WHERE r.childid = cats.dbid AND p1.dbid = r.parentid AND p2.dbid = r.childid
UNION ALL
SELECT cats.dbid AS sub,
r.parentid,
p1.subject,
r.childid,
p2.subject,
nd.path || r.parentid,
nd.depth + 1
FROM pedigree_search r,
pedigree p1,
pedigree p2,
nodes nd,
cats
WHERE r.childid = nd.parentid AND p1.dbid = r.parentid AND p2.dbid = r.childid AND nd.depth < 3
)
SELECT nodes.sub,
nodes.parentid,
nodes.parentname,
nodes.childid,
nodes.childname,
nodes.path,
nodes.depth
FROM nodes
)
SELECT d1.sub,
d1.parentid,
d1.parentname,
d1.childid,
d1.childname,
d1.path,
d1.depth
FROM d1
WHERE (d1.parentid IN ( SELECT d1_1.parentid
FROM d1 d1_1
GROUP BY d1_1.parentid
HAVING count(d1_1.parentid) > 1))
您的示例太复杂,无法遵循,但原则上看起来是这样的:
WITH RECURSIVE anc AS (
SELECT seed.p AS child,
r.parent AS ancestor,
1 AS level
FROM relation AS r
JOIN (VALUES (42),
(12),
...
) AS seed(p)
ON r.child = seed.p
UNION
SELECT a.child,
r.parent,
a.level + 1
FROM relation AS r
JOIN anc AS a
ON r.child = a.ancestor
WHERE a.level < 3
)
SELECT * FROM anc;
根据您的特殊情况进行修改和调整