这是我的查询:
MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4)-[:REL_4*]->(n4_2:Node4)
WHERE n4_2.property='Green'
MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4)
WHERE n4_1.property='Green'
我想结合这两个查询。我要实现的是,如果上部正确,则返回n4_2,如果下部正确,则返回n4_1,如果根本没有找到匹配,则返回null
。这里不是联合,因为列的名称不同。
答案 0 :(得分:1)
在这种情况下,您可以使用 UNION 。
MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4)-[:REL_4*]->(n4_2:Node4)
WHERE n4_2.property='Green'
RETURN n4_2 AS node
UNION ALL
MATCH (u:User {userId:'aUser'})-[:REL_1]->(n2:Node2)-[:REL_2]->(n3:Node3)-[:REL_3]->(n4_1:Node4)
WHERE n4_1.property='Green'
RETURN n4_1 AS node
在您的情况下, n4_2 和 n4_1 属于相同的节点类型(即Node4)。
即使节点的类型不同(例如一个是“人”,另一个是“电影”,如:),联合也可以工作
MATCH (n1:Person) WHERE n1.born=1961 RETURN n1 as node
UNION ALL
MATCH (n2:Person) WHERE n2.born=1967 RETURN n2 as node
UNION ALL
MATCH (m1:Movie) WHERE m1.released=2006 RETURN m1 as node