我有一个这样的图表: (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
现在我的问题: 为什么我成为所有节点两次和关系三次?我只是希望得到所有这一次。
感谢您的时间^^
答案 0 :(得分:1)
Cypher的工作方式与SQL非常相似。在START子句中创建变量时,您在SQL(表)中执行from nodes, relationships
。你得到两者所有可能值的笛卡尔积的原因是因为你没有做任何match
或where
来过滤它们,所以它基本上就像: / 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)
除非你进行一些匹配,否则你应该只看到一次节点和关系。
试图重现你的问题,但我无法做到。
您是否可以创建一个console.neo4j.org问题示例?
谢谢,
安德烈斯