2017-01-16 10 views
0

クエリビルダを実行しようとしていますが、ユニオン句の結果として制約に含める必要があります。私は、この節の出力を、ノードのリストから除外したいと思います。私は「何でも」と呼ばれているすべてのノードを回避し、このクエリへの最終的なフィルタを含める必要があるだろう例としてCypher/Neo4j - ユニオン句の後に制約を追加する

MATCH (n)-[r]->(x) 
WHERE ('filter1' IN r.property or 'filter2' IN r.property) 
RETURN n,r,x 
UNION 
MATCH (n)-[r]->(x) 
WHERE ('foo2' IN n.property OR 'foo2' IN x.property 
RETURN n,r,x 

どうすればよいですか?句の最後にあるwhere句を使うだけで動作しますか?

+0

この例と同じ結果を与える必要があり、クエリ」 MATCH(N ) - [r] - >(x)ここで、( 'filter1'または 'filter2' IN r.property)N.IDが等しくない 'EXAMPLE'またはX.ID等しくない 'EXAMPLE'戻り値n、r 、x UNION MATCH(n) - [r] - >(x)ここで( 'foo2' IN n.propertyまたは 'foo2' IN x.property)N.IDが等しくない 'EXAMPLE'またはX.ID NOT等号 '例戻り値n、r、x " – ddomingo

+0

クエストに対してこのコメントを編集してくださいイオン。構文が正しくないこと、 ''例'の後にアポストロフィがないことに注意してください。 –

答えて

2

私は数週間前にsimilar questionでしたが、現在、Cypherは現在post-UNION processingをサポートしていません。

これは、同じ条件を使用して、共用体の両方の入力をフィルタリングする必要があることを意味します。

あるいは(this answerに述べたように)、あなたはAPOCを使用できる場合は、プロセスを投稿することができ、クエリの結果:

CALL apoc.cypher.run("... UNION ...", NULL) YIELD n, r, x 
WHERE ... 
RETURN n, r, x; 
+0

Gabor、あなたが参照した質問に答えがAPOC手順を使って解決策を示します。それはトリックを行う必要があります。 – InverseFalcon

+1

ありがとうございます - 技術的には可能ですが、同じ条件を2回繰り返すことはあまりにも悪いことではないと思います。 [その質問](http://stackoverflow.com/questions/41448935/order-by-the-result-of-union-of-subqueries)では、このトリックは非常に簡単に達成できない順序です。しかし、私はこれで答えを更新します。 –

+0

ありがとうございます。ついに、私は結婚と仕事のそれぞれの入力に同じ条件を追加することになりましたが、私はpy2neoを使ってクエリを実行するので、私はAPOCを使用できません。 AND(r.property2 = 'condition2')AND NOT(n.id = 'COMMON_CONSTRAIN'またはx.id = 'COMMON_CONSTRAIN '))リターンnはobject_node、rは関係、xは述語UNION MATCH(n) - [r] - >(x)ここで(' EXPAND_NODE '= n.idまたは' EXPAND_NODE '= x.BEL)AND NOT(戻り値はobject_nodeとして、rは関係として、xは述語としてx – ddomingo

関連する問題