密码-合并2个查询评估其中子句为true

时间:2019-02-01 08:22:10

标签: neo4j cypher

这是我的查询:

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。这里不是联合,因为列的名称不同。

1 个答案:

答案 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