我是 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
我看过这篇文章,但仍然无法解决这个问题。
这是我尝试过但仍然遇到相同错误的方法:
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)
可以发现 CREATE
和 MATCH
之间的语法错误是 WITH
。
WITH
应该在第三行的 CREATE
和第五(第四?)行的 MATCH
之间。
需要 WITH 来链接,将结果从一个查询部分传递到下一个查询部分。如果这让您感到困惑,请不要担心。你可以在这里阅读更多。
由于您没有将任何结果从第一部分传递到第二部分,因此您不需要它,但它在语法上是不正确的。
您可以在查询中添加 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,作者也是如此。