繁体   English   中英

neo4j cypher:使用UNION和WITH堆叠结果

[英]neo4j cypher: stacking results with UNION and WITH

我在做类似的查询

MATCH (a)
WHERE id(a) = {id}

WITH a

MATCH (a)-->(x:x)-->(b:b)

WITH a, x, b

MATCH (a)-->(y:y)-->(b:b)

WITH a, x, y, b

MATCH (b)-->(c:c)

RETURN collect(a), collect(x), collect(y), collect(b), collect(c)

我想在这里是有bMATCH (a)-->(y:y)-->(b:b)要由来自该行的那些和那些从以前的MATCH (a)-->(x:x)-->(b:b) 我在UNION上遇到的问题是它对下一个查询要传递的节点的数量和种类很挑剔,而且我在理解如何使它们全部组合在一起方面遇到困难。

在查询期间或返回它们之前,我可以使用什么其他解决方案合并这些节点? (或者如果我应该用UNION来做,那怎么做呢...)

(当然,可以用其他更好的方法来完成那里的查询。我真正的人不能。这只是为了给出我想要做的事情的直观示例。)

多谢!

这个简化的查询可能适合您的需求。

我清除了所有的collect()函数调用,因为不清楚您是否真的需要聚合任何东西。 例如,只有一个“ a”节点,因此聚合“ a”没有任何意义。

请注意,结果的每一行都是针对标记 “ x”或“ y”的节点。 但是,由于每一行必须同时具有x和y值-每行中的其中一个都将具有空值。

START a=node({id})
MATCH (a)-->(x:x)-->(b:b)-->(c:c)
RETURN a, x, null AS y, b, c
UNION 
MATCH (a)-->(y:y)-->(b:b)-->(c:c)
RETURN a, null AS x, y, b, c

我能想出到底最好的解决办法是这样

MATCH (a)-->(x:x)-->(b1:b)-->(c1:c)
WHERE id(a) = {id} AND NOT (a)-->(:y)-->(b1)

WITH a, collect(x) as xs, collect(DISTINCT b1) as b1s, collect(c1) as c1s

MATCH (a)-->(y:y)-->(b2:b)-->(c2:c)

RETURN a, xs, collect(y), (b1s + collect(b2)), c1s + collect(c2)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM