首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Cypher:在CREATE和MATCH之间需要WITH

Cypher:在CREATE和MATCH之间需要WITH
EN

Stack Overflow用户
提问于 2015-08-22 21:32:03
回答 1查看 3.2K关注 0票数 1

我想创建一组节点,并获得create语句的结果。如果我在Neo4j浏览器中执行此操作...

代码语言:javascript
运行
复制
CREATE (a:Group {name: "a"})
     , (b:Group {name: "b"})
     , (c:Group {name: "c"})
MATCH (r:Room)
RETURN r

..。我得到了一个Neo.ClientError.Statement.InvalidSyntax error: WITH is required between CREATE and MATCH

如果我创建了一个虚拟的WITH语句,我不会得到这个错误...

代码语言:javascript
运行
复制
CREATE (a:Group {name: "a"})
     , (b:Group {name: "b"})
     , (c:Group {name: "c"})
WITH a as a
MATCH (r:Room)
RETURN r

..。或者如果我把它分成两个独立的查询,首先...

代码语言:javascript
运行
复制
CREATE (a:Group {name: "a"})
     , (b:Group {name: "b"})
     , (c:Group {name: "c"})

..。然后..。

代码语言:javascript
运行
复制
MATCH (r:Room)
RETURN r

您能帮助我理解WITH语句的作用吗?为什么在创建一个查询时它是必不可少的?

EN

回答 1

Stack Overflow用户

发布于 2015-08-23 00:45:14

所以基本上WITH所做的就是让你chain together two different queries。这很有用,因为它有助于减少回答查询所需的计算量。

您的查询有点奇怪:

代码语言:javascript
运行
复制
CREATE (a:Group {name: "a"})
     , (b:Group {name: "b"})
     , (c:Group {name: "c"})
WITH a as a
MATCH (r:Room)
RETURN r

奇怪的是,CREATE和MATCH之间没有共同的变量。这里似乎更多的是使用WITH将两个不相关的查询作为一条语句运行。这很好,但我认为WITH对您来说很尴尬,因为这不是它的预期使用方式。

我在顶部发布的链接给出了您想要使用的具体原因。(限制搜索路径的分支,并在处理更多结果之前对结果进行排序)。

对于您的特定查询,我倾向于将CREATE和MATCH分为两个不同的查询,因此WITH在这里似乎很奇怪。下面是一个您本可以运行的查询的不同示例,它会更有意义:

代码语言:javascript
运行
复制
MATCH (g:Group)
WHERE g.prop = "foo" /* some condition, only some groups */
WITH g
CREATE (g)-[:rel]->(another:Group)
WHERE another.prop = "bar";

因此查询将只匹配某些组,然后创建与其他组关系- with help清楚地表明,正在创建的新关系仅限于在前面步骤中匹配的那些内容。

希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32156721

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档