Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.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
neo4j cypher:使用UNION和with叠加结果_Neo4j_Cypher - Fatal编程技术网

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)