我是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)
答案 0 :(得分:1)
您会发现在WITH
和CREATE
之间需要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,作者也一样。