了解密码输出

时间:2012-05-22 14:58:30

标签: neo4j cypher

我有一个这样的图表: (2)< - [0:CHILD] - (1) - [1:CHILD] - 甲醇(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

现在我的问题: 为什么我成为所有节点两次和关系三次?我只是希望得到所有这一次。

感谢您的时间^^

2 个答案:

答案 0 :(得分:1)

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

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 *

但由于你没有比赛,你会得到一个笛卡尔积。

答案 1 :(得分:0)

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

试图重现你的问题,但我无法做到。

http://tinyurl.com/cobd8oq

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

谢谢,

安德烈斯