在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)
另外,我并不特别喜欢通过"收集"来做这件事,因为我担心大量的内存成本.我宁愿让引擎推断出最好的查找方式.
我没有这些节点之间的关系,也不想要一个.我只是好奇为什么在另一个节点中不允许返回一系列节点的表达式.
谢谢
对于您的特定查询,您WITH
根本不必使用,有一种更简单的方法可以做到这一点:
MATCH (m:Movie)
WHERE NOT m:BadMovie
RETURN m;
这比在 SQL 中执行的子查询要容易得多。
关于“为什么 cypher 不允许子查询”的问题——它还没有内置到语言中。您可以在 opencypher 站点上看到许多相关的cypher 改进提案——其他人正在考虑并提出与此相关的主题。
归档时间: |
|
查看次数: |
404 次 |
最近记录: |