多个匹配语句出现问题,结果没有有效模式的行

时间:2015-05-07 12:52:48

标签: graph neo4j cypher

我正在尝试在Neo4j中创建一个带有代理和" KNOWS"  关系。

Match (a:AGENT {name:'a'})
Match (e:AGENT {name:'e'})
Match d1 = (a) -[r1:KNOWS]-> (e)
Match d2 = (a) -[r1:KNOWS]-> (x) -[r2:KNOWS]-> (e)
Return d2

给定: d1独立运行不返回任何行。 d2独立运行返回有效结果

当我运行上面的代码(包含两个语句)时,结果是没有行。为什么d2受到d1的影响导致没有行?

我是cypher和neo4j的新手,请帮助。

以下是在官方neo4j控制台上设置的数据库: http://console.neo4j.org/r/617mrr

2 个答案:

答案 0 :(得分:0)

您可以尝试这样

MATCH d2=(a:AGENT { name:'a' })-[r1:KNOWS]->(x)-[r2:KNOWS]->(e:AGENT { name:'e' })
optional match d1 = (a) -[r:KNOWS]-> (e)
RETURN d2

这是你需要的吗?

答案 1 :(得分:0)

d1不返回任何数据,因为从ae没有单跳路径。由于您没有任何匹配是可选的,因此您无法获得整个查询的数据。

这将导致d1找到匹配。

match (a:AGENT {name:'a'})
, (e:AGENT {name:'e'})
, d1 = (a) -[r1:KNOWS*..2]-> (e)
return d1

这是您的原始文件,只需稍加修改即可返回数据。

match (a:AGENT {name:'a'}), (e:AGENT {name:'e'})
, d2 = (a) -[r1:KNOWS]-> (x) -[r2:KNOWS]-> (e)
optional match d1 = (a) -[r1:KNOWS]-> (e)
return d2