2017-10-30 9 views
0

CYPHERを使用してNEO4Jで簡単なグラフを作成しようとしています。私はMERGEとMATCHの間にWITHが必要です(行4、列1(オフセット:63))

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

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

そのに私のクエリを変更しようとすると

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'}) 

そのは

Can't create node `nut` with labels or properties here. The variable is already declared in this context 
を言う私にエラー

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

をスロー:以下

は、クエリです

このコンテキストでMERGEステートメントを使用する方法。私はNeo4j linkのチュートリアルを使ってクエリを作成しました。

答えて

2

2つのノードを作成した後で直接MATCHを使用したため、最初のエラーが発生しました。クエリは継続的ですが、ラベル付きのMATCHを使って部分的に分割しました。継続を維持するためにはWITHを使用してください。

同じ変数nutを2回使用しているために2番目のエラーが発生しました。

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'}) 

2つ目:

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

MERGE (nut)-[:hasPart]->(washer:asset{name:'washer',domain:'tool'}) 
関連する問題