在一个查询中分隔匹配

时间:2014-05-13 13:47:36

标签: neo4j cypher

我有节点标有' Group'只有一些人与人有关系。 Ť

GroupA {}, GroupB{personA, personB}, GroupC{}

我希望获得分配给他们的所有团体和成员,但我只能想办法让团体成员

Match (:Client {value:'1234'})-[:IDENTIFIES]->(a)<-[r:PART_OF*]-(b:Group)
<-[:BELONGS_TO]-(per:Person)

即使我与UNION单独进行比赛,我也无法同时获得空组和成员组。它说列名必须相同。我可能做错了什么。

任何帮助?谢谢!

2 个答案:

答案 0 :(得分:1)

MATCH (c:Client {value: 1234})-[:IDENTIFIES]->(a)<-[r:PART_OF*]-(b:Group)<-[:BELONGS_TO]-             (per:Person), (g:Group) 
RETURN per, b, g 

这假设您在显示的组方面可以复制结果。它还取决于您希望如何返回/显示结果(例如,您可能想要使用COLLECT)。当每行包含所有组时,迭代“成员”结果可能有点尴尬。

如果您只想要空组,可以尝试以下方法:

MATCH (g:Group)
WHERE NOT g--()
RETURN g

答案 1 :(得分:1)

此查询应该执行您想要的操作。如果per组没有属于null,则结果行中的b值将为Person。您可以使用此查询using this console link

MATCH (:Client {value:'1234'})-[:IDENTIFIES]->(a)<-[r:PART_OF*]-(b:Group)
OPTIONAL MATCH (b)<-[:BELONGS_TO]-(per:Person)
RETURN DISTINCT a, b, per;