cypher等同于sql嵌套查询

Ric*_*ier 5 sql nested cypher

在Cypher,除非我遗漏了什么,为什么我不能这样做:

match(m:Movie)
where not m.title in (match (bm:BadMovie) return bm.title)
return m
Run Code Online (Sandbox Code Playgroud)

但必须通过中间的WITH:

with match (bm:BadMovie) return collect(bm.title) as badTitles
match(m:Movie)
where not m.title in badTitles
return m
Run Code Online (Sandbox Code Playgroud)

在SQL中,我只是这样做:

select * from Movie where title not in (select title from BadMovie)
Run Code Online (Sandbox Code Playgroud)

另外,我并不特别喜欢通过"收集"来做这件事,因为我担心大量的内存成本.我宁愿让引擎推断出最好的查找方式.

我没有这些节点之间的关系,也不想要一个.我只是好奇为什么在另一个节点中不允许返回一系列节点的表达式.

谢谢

Fro*_*its 2

对于您的特定查询,您WITH根本不必使用,有一种更简单的方法可以做到这一点:

MATCH (m:Movie) WHERE NOT m:BadMovie RETURN m;

这比在 SQL 中执行的子查询要容易得多。

关于“为什么 cypher 不允许子查询”的问题——它还没有内置到语言中。您可以在 opencypher 站点上看到许多相关的cypher 改进提案——其他人正在考虑并提出与此相关的主题。