了解密码输出



我有这样的图表:(2(<-[0:儿童]-(1(-[1:儿童]->(3(换句话说:节点 1、2 和 3(都有名称(;边 0 和 1

我写了下面的密码查询:

START nodes = node(1,2,3), relationship = relationship(0,1) 
RETURN nodes, relationship

结果得到:

==> +-----------------------------------------------+
==> | nodes                          | relationship |
==> +-----------------------------------------------+
==> | Node[1]{name->"Risikogruppe2"} | :CHILD[0] {} |
==> | Node[1]{name->"Risikogruppe2"} | :CHILD[1] {} |
==> | Node[2]{name->"Beruf 1"}       | :CHILD[0] {} |
==> | Node[2]{name->"Beruf 1"}       | :CHILD[1] {} |
==> | Node[3]{name->"Beruf 2"}       | :CHILD[0] {} |
==> | Node[3]{name->"Beruf 2"}       | :CHILD[1] {} |
==> +-----------------------------------------------+
==> 6 rows, 0 ms

现在我的问题:为什么我两次成为所有节点,三次成为关系?我只想一次性得到这一切。

感谢您抽出宝贵时间^^

Cypher的工作方式与SQL非常相似。当你在 START 子句中创建变量时,你是在 SQL(表(中执行from nodes, relationships。你得到两者所有可能值的笛卡尔乘积的原因是因为你没有做任何matchwhere来过滤它们,所以它基本上是这样的:

select *
from nodes, relationships

您忘记在表之间放置外键关系的地方。

在Cypher中,你通过进行匹配来做到这一点,通常是:

start n=node(1,2,3), r=relationship(0,1)
match n-[r]-m // find where the n nodes and the r relationships point (to m)
return *

但是由于你没有匹配,你会得到一个笛卡尔乘积。

除非进行某些匹配,否则应只查看一次节点和关系。

试图重现您的问题,但我无法重现。

http://tinyurl.com/cobd8oq

您是否可以为您的问题创建一个 console.neo4j.org 示例?

谢谢

安德烈斯

最新更新