MERGE和MATCH之间需要WITH(第4行,第1列(偏移量:63))

时间:2017-10-30 07:34:02

标签: neo4j nosql graph-databases

我正在尝试使用CYPHER在NEO4J上创建一个简单的图形。

以下是查询:

MERGE (nut:asset{name:'nut'})
MERGE (bolt:asset{name:'bolt'})

MATCH (nut:asset)
WITH nut,bolt
MERGE (nut:asset)-[:hasPart]->(washer:asset{name:'washer',domain:'tool'})

它引发了我的错误

WITH is required between MERGE and MATCH (line 4, column 1 (offset: 63))
"MATCH (nut:asset)"
 ^

当我尝试将查询更改为

MERGE (nut:asset{name:'nut'})
MERGE (bolt:asset{name:'bolt'})

MERGE (nut:asset)-[:hasPart]->(washer:asset{name:'washer',domain:'tool'})

它说

Can't create node `nut` with labels or properties here. The variable is already declared in this context

如何在此上下文中使用MERGE语句。我使用了Neo4j link的教程来构建我的查询。

1 个答案:

答案 0 :(得分:3)

导致第一个错误是因为在创建两个节点后,您直接使用了MATCH。查询是连续的,但您使用带有标签的MATCH将其分解为多个部分。为了保持继续,您必须使用WITH

第二个错误是由于您使用相同的变量nut两次造成的。

使用WITH可以减少查询的基数和时间。

第一个查询可以这样写:

MERGE (nut:asset{name:'nut'}) 
with nut
MERGE (bolt:asset{name:'bolt'}) 
with nut,bolt
MERGE (nut)-[:hasPart]->(washer:asset{name:'washer',domain:'tool'})

和第二个:

MERGE (nut:asset{name:'nut'})
MERGE (bolt:asset{name:'bolt'})

MERGE (nut)-[:hasPart]->(washer:asset{name:'washer',domain:'tool'})