在Cypher,除非我遗漏了什么,为什么我不能这样做:
match(m:Movie)
where not m.title in (match (bm:BadMovie) return bm.title)
return m
但必须通过中间人WITH:
with match (bm:BadMovie) return collect(bm.title) as badTitles
match(m:Movie)
where not m.title in badTitles
return m
在SQL中,我只是这样做:
select * from Movie where title not in (select title from BadMovie)
另外,我并不特别喜欢通过'收集'来做这件事,因为我担心大量的内存成本。我宁愿让引擎推断出最佳的查找方式。
我没有这些节点之间的关系,也不想要一个。我只是好奇为什么在另一个节点中不允许返回一系列节点的表达式。
谢谢
答案 0 :(得分:0)
对于您的特定查询,您根本不必使用WITH
,这是一种更简单的方法:
MATCH (m:Movie)
WHERE NOT m:BadMovie
RETURN m;
这比您在SQL中执行的子查询要简单得多。
关于“为什么密码不能允许子查询”的问题-语言还没有内置。您可以在opencypher网站上找到许多相关的cypher improvement proposals -其他人正在考虑并提出与此相关的主题。