Cypher中的neo4j子查询

时间:2013-08-31 12:55:41

标签: neo4j cypher

我的密码查询是初学者。 我想查询如下

数据插入

CREATE ( USER{ talk_id : 1 , phone_num : "1" } );  //[1]
CREATE ( USER{ talk_id : 2 , phone_num : "2" } );  //[2]
CREATE ( USER{ talk_id : 3 , phone_num : "3" } );  //[3]
CREATE ( USER{ talk_id : 4 , phone_num : "4" } );  //[4]


CREATE ( USER{ talk_id : 5 , phone_num : "5" } ); //[5]
CREATE ( USER{ talk_id : 6 , phone_num : "6" } ); //[6]
CREATE ( USER{ talk_id : 7 , phone_num : "7" } ); //[7]

START s=node(1) , d=node(2) CREATE s-[r:FRIEND]->d RETURN r;
START s=node(1) , d=node(3) CREATE s-[r:FRIEND]->d RETURN r;
START s=node(1) , d=node(4) CREATE s-[r:FRIEND]->d RETURN r;

START s=node(2) , d=node(7) CREATE s-[r:FRIEND]->d RETURN r;

quering

查询1:

START s=node(1) match s-[r]->f return f;

结果:

+----------------------------------+
| f                                |
+----------------------------------+
| Node[2]{talk_id:2,phone_num:"2"} |
| Node[3]{talk_id:3,phone_num:"3"} |
| Node[4]{talk_id:4,phone_num:"4"} |
+----------------------------------+

查询2

start s = node( 2, 3 , 4 ) , s1 = node( 2 , 3 , 4 ) match p=s-[r]->s1 return s1;

我想要s和交叉点s1的关系节点;

结果:

+----------------------------------+
| s                                | 
+----------------------------------+
| Node[3]{talk_id:3,phone_num:"3"} |
+----------------------------------+
1 row

我想将两者合并为一个查询和结果

ex)

+----------------------------------+
| f                                |
+----------------------------------+
| Node[2]{talk_id:2,phone_num:"2"} |
| Node[3]{talk_id:3,phone_num:"3"} |
| Node[4]{talk_id:4,phone_num:"4"} |
| Node[3]{talk_id:3,phone_num:"3"} |
+----------------------------------+

我该怎么办,但是? RDBMS就像子查询一样

TANK YOU ^^;

1 个答案:

答案 0 :(得分:1)

不确定我是否正确理解了您的问题。基于此我可以猜出你要求的两个案例

1)您希望将第一个查询的结果用作第二个查询的起点,并将其合并为一个查询:

start s=node(1)
match s-[r1]->()-[r2]->f
return f

N.B。 path match之后的表达式可能具有任意长度。

您也可以使用with

拆分它并链接子查询
start s=node(1)
match s-[r1]->t
with t
match t-[r2]->f
return f

2)您希望将两个不同查询的结果合并到一个结果集中。在这种情况下,您必须使用Neo4j 2.0中引入的UNION关键字,或者在客户端执行此操作。