SyntaxError:在CREATE和MATCH之间需要WITH

时间:2019-04-07 16:11:16

标签: neo4j cypher

我是Cypher查询的初学者。因此,我试图了解MATCH和CREATE。这是我目前正在定义作者与书本之间的关系:

MATCH (book1:Book1 {title: 'The Ones Who Walk Away From Omelas'})
MATCH (author1:Author1 {name: 'Ursula K. Le Guin'})
CREATE (author1) - [:IS_AUTHOR_OF] -> (book1)

MATCH (book2:Book2 {title: 'A Fire Upon the Deep'})
MATCH (author2:Author2 {name: 'Vernor Vinge'})
CREATE (author2) - [:IS_AUTHOR_OF] -> (book2)

但这会引发我错误:

  

SyntaxError:在CREATE和MATCH之间需要WITH

我看过this post,但仍然无法解决此问题。

这是我尝试过的仍然遇到相同错误的地方:

MATCH (author1:Author1 {name: 'Ursula K. Le Guin'})
MATCH (book1:Book1 {title: 'The Ones Who Walk Away From Omelas'})
WITH author1, book1
CREATE (author1) - [:IS_AUTHOR_OF] -> (book1)

MATCH (author2:Author2 {name: 'Vernor Vinge'})
MATCH (book2:Book2 {title: 'A Fire Upon the Deep'})
WITH author2, book2
CREATE (author2) - [:IS_AUTHOR_OF] -> (book2)

1 个答案:

答案 0 :(得分:1)

您会发现在WITHCREATE之间需要MATCH的语法错误。

WITH应该在第三行的CREATE和第五(第四行)的MATCH之间。

需要链接,将结果从一个查询部分传递到下一个查询部分。如果这让您感到困惑,请不要担心。您可以阅读更多here

由于您没有将任何结果从第一部分传递到第二部分,因此您不需要它,但是从语法上讲这是错误的。

您可以在查询中添加WITH,如下所示,以消除错误。

MATCH (book1:Book1 {title: 'The Ones Who Walk Away From Omelas'})
MATCH (author1:Author1 {name: 'Ursula K. Le Guin'})
CREATE (author1) - [:IS_AUTHOR_OF] -> (book1)
WITH true as pass
MATCH (book2:Book2 {title: 'A Fire Upon the Deep'})
MATCH (author2:Author2 {name: 'Vernor Vinge'})
CREATE (author2) - [:IS_AUTHOR_OF] -> (book2)

或者,您可以按照不同的顺序进行操作并避免使用WITH,区别在于,如果这些书/作者中的任何一个都不匹配,它将不会创建任何内容。

MATCH (author1:Author1 {name: 'Ursula K. Le Guin'})
MATCH (book1:Book1 {title: 'The Ones Who Walk Away From Omelas'})
MATCH (author2:Author2 {name: 'Vernor Vinge'})
MATCH (book2:Book2 {title: 'A Fire Upon the Deep'})
CREATE (author1) - [:IS_AUTHOR_OF] -> (book1)
CREATE (author2) - [:IS_AUTHOR_OF] -> (book2)

P.S .:看起来您使用的是Book1和Book2,而不仅仅是Book,作者也一样。

相关问题