我是密码查询的初学者。所以,我试图理解匹配和创造。以下是我目前对作者和这本书之间关系的定义:
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)
但这给我带来了错误:
语法错误: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)
PS:看起来你用的是Book1和Book2,而不仅仅是Book,作者也一样。