【发布时间】:2019-04-08 23:54:23
【问题描述】:
我有一个很长的密码查询,它使用联合,但是,有一些常见的语句(粗体)在两个查询中重复。有没有办法我可以分解,甚至存储公共语句的结果集,然后在稍后将它们分支和合并?我已经调查过使用 with、collect 和 optional match 但无济于事。
MATCH (s:Subject), (p:Programme)
在 ['A', 'B', 'C'] 中的 s.name
将收集作为 subs, p
WITH p, subs, SIZE(FILTER(c in subs WHERE c.level ="CSEC")) 作为 csecs, SIZE(FILTER(c in subs WHERE c. level ="CAPE")) 作为披风
WHERE p.csec_passes
MATCH (p:Programme)-[:requires]->(s:Subject)
WITH p, subs, COLLECT(s) AS mandatories WHERE ALL(n IN mandatories WHERE n IN subs) 而不是 (p)-->(:Combo)
返回 p
联合
MATCH (s:Subject), (p:Programme)
在 ['A', 'B', 'C'] 中的 s.name
将收集作为 subs, p
WITH p, subs, SIZE(FILTER(c in subs WHERE c.level ="CSEC")) 作为 csecs, SIZE(FILTER(c in subs WHERE c. level ="CAPE")) 作为披风
WHERE p.csec_passes
MATCH (p:Programme)-[:requires]->(s:Subject)
WITH p, subs, COLLECT(s) AS 强制要求 WHERE ALL(n IN 强制要求 WHERE n IN subs)
MATCH (p)-[:requires]->(c:Combo)-[:contains]->(s:Subject)
将 p、c、subs、collect(s) 作为列表
WITH p, subs, collect({amt:c.amt, set:list}) 作为组合
WHERE ALL(combo in combo.amt
一些额外的上下文;所有程序节点都连接到至少一个称为强制的主题节点。此外,一些程序节点还连接到一个或多个组合节点。在这种情况下,需要对程序进行更多检查,我将联合查询组合和非组合两种类型。
【问题讨论】:
标签: neo4j cypher query-optimization graph-databases