Neo4j 将两个密码查询与UNION结合的问题

Neo4j 将两个密码查询与UNION结合的问题,neo4j,cypher,Neo4j,Cypher,在上组合两个密码查询时,我遇到了以下问题 查询: MATCH (p1:Crew)-[r_pfq]->(fq:Crew) WHERE fq.name IN ["Neo", "Morpheus"] RETURN distinct(p1) AS person, count(r_pfq) AS friend_score, collect(fq.name) AS friends ORDER BY friend_score DESC LIMIT 10 工作很好,我也是 MATCH (f:Crew)&

在上组合两个密码查询时,我遇到了以下问题

查询:

MATCH (p1:Crew)-[r_pfq]->(fq:Crew)
WHERE fq.name IN ["Neo", "Morpheus"]
RETURN distinct(p1) AS person, count(r_pfq) AS friend_score, collect(fq.name) AS friends
ORDER BY friend_score DESC
LIMIT 10
工作很好,我也是

MATCH (f:Crew)<-[r_fqf]-(fq:Crew)
WHERE fq.name IN ["Neo", "Morpheus"]
WITH distinct(f), count(r_fqf) AS weight
ORDER BY weight DESC
LIMIT 10
MATCH f<--(p:Crew)
RETURN distinct(p) AS person, sum(weight) AS friend_score, collect(f.name) AS friends
ORDER BY friend_score DESC
LIMIT 10
我得到了错误

Error: org.neo4j.graphdb.NotFoundException: Unknown identifier `weight`.
有人能给我解释一下为什么不能合并这些查询结果,以及如何正确地进行合并吗?为什么在单独运行两个查询时标识符是已知的,而在联合组合查询中标识符是未知的?

EDIT

下面的简单查询基本上是等效的,除了
联合中的第二个查询不按
权重排序。这是因为我们已经按照派生的
友人评分
进行了排序,因此它似乎是多余的。此外,为了将变量包含在order BY子句中,它必须位于RETURN子句中——但UNION中的第一个查询没有
weight
变量,这将违反合法UNION语句的要求

此外,在第二个查询中还有第二个WITH子句,因为您必须在RETURN子句之前定义ORDER BY子句中使用的变量(如
friend\u score

MATCH (p1:Crew)-[r_pfq]->(fq:Crew)
WHERE fq.name IN ["Neo", "Morpheus"]
RETURN DISTINCT (p1) AS person, count(r_pfq) AS friend_score, collect(fq.name) AS friends
ORDER BY friend_score DESC 
LIMIT 10
UNION
MATCH (p:Crew)-->(f:Crew)<-[r_fqf]-(fq:Crew)
WHERE fq.name IN ["Neo", "Morpheus"]
WITH f, count(r_fqf) AS weight, p
WITH f, sum(weight) AS friend_score, p
RETURN DISTINCT (p) AS person, friend_score, collect(DISTINCT (f).name) AS friends
ORDER BY friend_score DESC 
LIMIT 10
匹配(p1:机组)-[r\u pfq]->(fq:机组)
其中fq.name位于[“Neo”,“Morpheus”]
返回不同的(p1)作为个人,计数(r_pfq)作为朋友,收集(fq.name)作为朋友
按朋友订购
限制10
联合

你忘了第二份工会声明了吗?在您粘贴在底部的查询中,查看大约2/3次,它显示“限制10匹配fwell,可能限制10并不太有用,但我认为一次又一次的限制匹配只会将这10个结果应用到匹配条件上。无论如何,取消限制不会改变关于未知标识符问题的任何内容。事实上,
UNION
查询只有在删除查询两部分中的
orderby
语句(在
UNION
语句的上方和下方)时才有效。我不明白为什么这两个查询在通过UNION连接时会有不同的解释,而事实上我只想将结果进行组合…?我不是在谈论LIMIT和ORDER by的有用性,我是说,正如您的查询目前所述,它在语法上对我来说是不正确的。最后一个匹配在任何情况下都是错误的。奇怪的是,这个查询给了我相同的
错误:org.neo4j.graphdb.NotFoundException:未知标识符“weight”。
@cybersam:我们如何根据联合的总结果进行排序,限制为总结果?我在Cypher中找不到这样做的方法。谢谢您的解决方案。事实上,我以前也尝试过类似的方法,我的数据的问题是,
MATCH(p:Crew)-->(f:Crew)
MATCH (p1:Crew)-[r_pfq]->(fq:Crew)
WHERE fq.name IN ["Neo", "Morpheus"]
RETURN DISTINCT (p1) AS person, count(r_pfq) AS friend_score, collect(fq.name) AS friends
ORDER BY friend_score DESC 
LIMIT 10
UNION
MATCH (p:Crew)-->(f:Crew)<-[r_fqf]-(fq:Crew)
WHERE fq.name IN ["Neo", "Morpheus"]
WITH f, count(r_fqf) AS weight, p
WITH f, sum(weight) AS friend_score, p
RETURN DISTINCT (p) AS person, friend_score, collect(DISTINCT (f).name) AS friends
ORDER BY friend_score DESC 
LIMIT 10