cypher等同于sql嵌套查询

时间:2017-07-01 11:33:34

标签: sql nested cypher

在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)

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

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

谢谢

1 个答案:

答案 0 :(得分:0)

对于您的特定查询,您根本不必使用WITH,这是一种更简单的方法:

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

这比您在SQL中执行的子查询要简单得多。

关于“为什么密码不能允许子查询”的问题-语言还没有内置。您可以在opencypher网站上找到许多相关的cypher improvement proposals -其他人正在考虑并提出与此相关的主题。