我有一个这样的图:(2)<-0:CHILD-(1)-1:CHILD->(3)换句话说:节点1,2和3(都有名字);边0和1
我编写了以下cypher-query:
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
现在我的问题是:为什么我两次成为所有节点,三次成为关系?我只想一次得到所有的东西。
感谢您抽出时间^^
发布于 2013-06-09 05:51:55
Cypher的工作方式与SQL非常相似。当您在START子句中创建变量时,您可以在SQL (表)中执行from nodes, relationships
。你得到这两个值的所有可能值的笛卡尔乘积的原因是因为你没有做任何类型的match
或where
来过滤它们,所以它基本上是这样的:
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 *
但是因为你没有匹配项,所以你得到了笛卡尔乘积。
发布于 2012-05-22 23:14:28
您应该只看到节点和关系一次,除非您进行了一些匹配。
我试着重现你的问题,但我没能做到。
http://tinyurl.com/cobd8oq
你能为你的问题创建一个console.neo4j.org示例吗?
谢谢,
安德烈
https://stackoverflow.com/questions/10704620
复制相似问题