neo4j cypher:使用UNION和with叠加结果
我在做一个类似这样的查询neo4j cypher:使用UNION和with叠加结果,neo4j,cypher,Neo4j,Cypher,我在做一个类似这样的查询 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匹配(a)
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
匹配(a)-->(y:y)-->(b:b)
由该行中的值和前面匹配(a)-->(x:x)-->(b:b)
中的值组成。我在使用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)