0

我有一个这样的图表: (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

现在我的问题是:为什么我两次成为所有节点,三次成为关系?我只想一次全部搞定。

谢谢你的时间^^

4

2 回答 2

1

Cypher 的工作方式与 SQL 非常相似。当您在 START 子句中创建变量时,您有点from nodes, relationships在 SQL(表)中进行操作。您获得两者所有可能值的笛卡尔积的原因是因为您没有对它们进行任何类型的过滤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 *

但是由于您没有匹配项,因此您将获得笛卡尔积。

于 2013-06-08T21:51:55.280 回答
0

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

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

http://tinyurl.com/cobd8oq

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

谢谢,

安德烈斯

于 2012-05-22T15:14:27.553 回答