首页 > 解决方案 > Cypher 查询中的多个匹配语句

问题描述

我正在努力检测图形数据库中的各种模式。目前我想在一个查询中组合各种 MATCH 语句。我有一个测试数据集,其中记录了人们结婚的教堂等。有可能(我们在这里谈论的是早期现代荷兰共和国)一对夫妇在天主教堂和荷兰归正教会结婚。因此,我想创建一个查询来检索这些人的姓名。

稍微简化一下,图的构建块由三种类型的节点组成:人、事件、教堂。事件节点有另一个标签“婚姻”,而教堂节点有另一个标签“罗马天主教会”或“荷兰归正教会”。例如:约翰·多伊在天主教堂的婚姻以这种形式存在:

(p:Person {name: "John Doe"})-[:MARRIED_AT]->(event:marriage)-[:TOOK_PLACE_IN]->(church:Roman_Catholic_Church)

一些人节点与与之相关的各种教会有各种婚姻。如何找回在天主教会和荷​​兰归正会结婚的夫妻?我创建了这个查询,但虽然它应该产生结果,但它没有:

Match (p:person)-[:MARRIED_AT]->(event)-[:TOOK_PLACE_IN]->(ch:church:Roman_Catholic_Church), (p:person)-[:MARRIED_AT]->(event)-[:TOOK_PLACE_IN]->(ch:church:Reformed_Church) Return p.name

我没有收到任何错误消息,但查询没有产生任何结果(而我已经检查过我的数据集确实包括在两个教堂举行婚礼的人)。知道我在这里做错了什么吗?

标签: neo4jcypher

解决方案


您正在重用变量,这就是您没有得到结果的原因,请尝试以下查询

MATCH (p:person)-[:MARRIED_AT]->(:marriage)-[:TOOK_PLACE_IN]->(rcc:church:Roman_Catholic_Church),
(p)-[:MARRIED_AT]->(:marriage)-[:TOOK_PLACE_IN]->(rc:church:Reformed_Church) 
RETURN DISTINCT p.name

推荐阅读