[英]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)
我想在这里是有b
从MATCH (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.