【问题标题】:Linking various where/where not statements in Cypher在 Cypher 中链接各种 where/where not 语句
【发布时间】:2023-01-20 21:45:20
【问题描述】:

我想知道参加 18 世纪荷兰共和国敌对天主教堂活动的人是否相互结婚。首先,我从在敌对教会受洗的人开始:

MATCH (p:person)-[:MARRIED_AT]-(m:marriage)-[:MARRIED_AT]-(pp:person)
WHERE (p)-[:BAPTISED_AT]-(:event:baptism)--(:church:Church_of_Utrecht) AND (pp)-[:BAPTISED_AT]-(:event:baptism)--(:church:Roman_Catholic_Church)

然而,可能是在洗礼之后和结婚之前,人们参加了敌对教会的活动,所以我需要排除这种可能性。这可以通过 WHERE NOT 语句来完成:

MATCH (p:person)-[:MARRIED_AT]-(m:marriage)-[:MARRIED_AT]-(pp:person)
WHERE (p)-[:BAPTISED_AT]-(:event:baptism)--(:church:Church_of_Utrecht) AND (pp)-[:BAPTISED_AT]-(:event:baptism)--(:church:Roman_Catholic_Church)
MATCH (p), (pp)
WHERE NOT (p)--(e:event)--(:church:Roman_Catholic_Church), (pp)--(ee:event)--(:church:Church_of_Utrecht)

然而,在这里,我卡住了,因为我需要指定 p 和 pp(e 和 ee)参与的事件发生在结婚年份(m)之前。这可以通过 WHERE 语句来完成:

WHERE e.Event_year > m.Event_year, ee.Event_year > m.Event_year

但是,我不知道如何将所有内容连接在一起并创建一个查询来为我执行此操作。

【问题讨论】:

  • 为什么需要第二个 MATCH+WHERE?你不能用AND扩展你的WHERE(然后简单地连接最后一个WHERE)吗?

标签: neo4j cypher


【解决方案1】:

你不能只使用AND吗?

MATCH (p:person)-[:MARRIED_AT]-(m:marriage)-[:MARRIED_AT]-(pp:person)
WHERE (p)-[:BAPTISED_AT]-(:event:baptism)--(:church:Church_of_Utrecht)
AND (pp)-[:BAPTISED_AT]-(:event:baptism)--(:church:Roman_Catholic_Church)
AND NOT (p)--(e:event)--(:church:Roman_Catholic_Church)
AND NOT (pp)--(ee:event)--(:church:Church_of_Utrecht)
AND e.Event_year > m.Event_year
AND ee.Event_year > m.Event_year

您不必对不同的 WHERE 子句进行双重匹配,因为只有两个节点要匹配。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    • 1970-01-01
    相关资源
    最近更新 更多