排除一個查詢的結果說我有兩個查詢在Neo4j的如何從另一個
MATCH (a:User)-[:Likes]->(b:Object) WHERE <condition on b> RETURN a
MATCH (a:User)-[:HasVisited]->(c:Location) WHERE <condition on c> RETURN a
我想這兩個結合起來。這樣,我有從QUERY2是DONOT適合QUERY1
到目前爲止,我已經嘗試結果如下
MATCH (a:User)-[:Likes]->(b:Object) MATCH (a:User)-[:HasVisited]->(c:Location) WHERE <condition on c> AND NOT <condition on b> RETURN a
但這種做法並不排除我想排除所有結果。
MATCH (a:User)-[:Likes]->(b:Object) WHERE <condition on b> WITH collect(DISTINCT a) as exc MATCH (a:User)-[:HasVisited]->(c:Location) WHERE <condition on c> AND NOT a IN exc RETURN a
這給正確的結果,但得到低效一次QUERY1和QUERY2開始變得更加複雜
我也曾嘗試
MATCH (a:User)-[:Likes]->(b:Object) WHERE <condition on b> WITH collect(DISTINCT a) as exc MATCH (a:User) WHERE NOT a IN exc WITH a MATCH MATCH (a:User)-[:HasVisited]->(c:Location) WHERE <condition on c> RETURN a
我曾希望減少節點數目一個可以與前期匹配會提高性能,但這種方法似乎沒有更好的工作。
是否有標準/更好的方法來排除匹配另一個查詢的結果?
我不知道一個更好的辦法,因爲沒有'MINUS'運營商在Cypher。使用'collect'和'IN'似乎是做到這一點的方法。 –