2016-10-17 165 views
-1

我想为我正在处理的项目编写CREATE关系语句。声明必须是这样的Cypher查询语言中的子查询

CREATE (match (p:Halt) where p.name="Ananda College" return p)-[:next_halt {route:['103'],dist:1.45}]->(MATCH (p:Halt) where p.name="Borella" return p) 

正如你所看到的,我希望开始节点和结束节点具有来自另一个CQL语句的值。 但是,当我运行这个查询似乎有一个语法错误。我已经通过一些教程来看看我的查询是错误的,但作为一个初学者,我真的不知道。

Invalid input '(': expected whitespace, comment, node labels, MapLiteral, a parameter, ')' or a relationship pattern (line 1, column 15 (offset: 14)) 
"CREATE (match (p:Halt) where p.name="Ananda College" return p)-[:next_halt {route:['103'],dist:1.45}]->(MATCH (p:Halt) where p.name="Borella" return p)" 
+2

我不确定你在哪里找到了这个语法,但是你可以在Cypher上找到一个广泛的入门书(http://neo4j.com/docs/developer-manual/3.0/cypher/)。 –

回答

1

您的语法在这里相当混乱。请重新阅读开发文档,也许看看Cypher作弊表。

至于正确的语法,你甚至不需要嵌套来得到你想要的。首先,你匹配的开始和结束的节点,那么你可以使用绑定变量在查询的其他部分,如创建一个关系:

MATCH (start:Halt), (stop:Halt) 
WHERE start.name = "Ananda College" AND stop.name="Borella" 
CREATE (start)-[:next_halt {route:['103'], dist:1.45}]->(stop) 

如果你不能确定是否节点(或关系)是否存在,您可以使用MERGE来替代现有的节点(或关系),或者在不存在的情况下创建它们。