2017-09-10 1 views
0

ごとに複数の行を返す:サイファーは私がCYPHERでのNeo4j照会していますし、試合ごとに2つの行を取得しています試合

MATCH (g:Group {Name: "Goliath_Treasury237"})-[w:MEMBER]->(a:Account)<-[y:ACCOUNT]-(p:Person)-[MANAGER*0..1]->(b:Person) 
WHERE NOT p.staffID = b.staffID 
MATCH (g:Group {Name: "Goliath_Treasury237"})-[j:MEMBER]->(v:Account)<-[x:ACCOUNT]-(p:Person)-[f:DEP*0..1]->(d:Department) 
RETURN p.GivenName, p.Surname, p.staffID, p.CorpT, b.staffID, d.Name 

私は部門と私人のボスの両方の情報を取得しようとしています私が二重一致をしない限り、宣言的に苦労している。これは、人が上司を持っている各マッチに対して2つの行を返します。一つはIDがボスIDで、もう一つが正しいボスIDです。私は上司がいない人のために、一行は戻ってくるが、上司は自分のものだ。

私は上司のための可変長のパスを削除した場合、私は個々の行を1つ取得しますが、誰かが上司を持たない行はありません。

私は今失っています、どんな助けも素晴らしいでしょう!

+0

私も泥単純な場合には二重の行を取得: MATCH(G:グループ{名: "Goliath_Treasury237"}) - [W:MEMBER] - >(a:Account)< - [y:ACCOUNT] - (p:Person) - [MANAGER * 0..1] - >(b:Person)はp.GivenName、p.Surname、p.staffID、pを返します。 CorpT、b.staffID これは奇妙に思えますが、私はそれがダブルマッチの問題だと思っていました。 –

答えて

0

ここで解決できることがいくつかあります。

2つ目のマッチを最初からやり直す必要はありません。同じpノードを再利用することができます。あなたが何らかの方法でそれを使用したり返さない場合は、すべてのノードと関係に変数を持つ必要はありません。

マッチで行を除外しないようにするには、OPTIONAL MATCHを使用できます。マッチしなかった場合、OPTIONAL MATCHの新しく導入された変数はnullになります。

このような何かが動作するはず

MATCH (:Group {Name: "Goliath_Treasury237"})-[:MEMBER]->(:Account)<-[:ACCOUNT]-(p:Person) 
OPTIONAL MATCH (p)-[MANAGER]->(b:Person) 
WHERE NOT p.staffID = b.staffID 
OPTIONAL MATCH (p)-[:DEP]->(d:Department) 
RETURN p.GivenName, p.Surname, p.staffID, p.CorpT, b.staffID, d.Name 
+0

ありがとう、これは実際に動作します。私は、オプションの一致についても理解していると思う。 –

関連する問題