Neo4j Cypher查询:在RETURN DISTINCT时出现“未知标识符”错误

5
为什么这个查询可以工作(尽管有重复行):
START user=node(1197)
MATCH (user)-[:WROTE_REVIEW]->()-[:EVALUATES]->(post)
RETURN post.Id, post.Image, post.Description
ORDER BY post.CreationTime DESC;

而这个则不行(它返回错误 Unknown identifier 'post'):

START user=node(1197)
MATCH (user)-[:WROTE_REVIEW]->()-[:EVALUATES]->(post)
RETURN DISTINCT post.Id, post.Image, post.Description
ORDER BY post.CreationTime DESC;

唯一的区别在于DISTINCT关键字。
我通过使用WITH找到了一个解决方法,但我认为我不应该这样做。
我正在使用Neo4j 2.0.0-M05。有任何想法吗?
谢谢!
1个回答

5

这是合法的。

DISTINCT关键字会移除那些在DISTINCT语句中未被提及的属性在排序中的可能性,因为它们可能会被折叠(例如,如果有3条记录的post.CreationTime被整合到一个带有DISTINCT的post.Id桶中,那么应该按哪个进行排序呢?)。为了获得可行的查询结果,请将post.CreationTime包含在DISTINCT中,如下所示:

START user=node(1197)
MATCH (user)-[:WROTE_REVIEW]->()-[:EVALUATES]->(post)
RETURN DISTINCT post.Id, post.Image, post.Description, post.CreationTime
ORDER BY post.CreationTime DESC;

虽然这并不是显而易见的,所以我提出了https://github.com/neo4j/neo4j/issues/1322,希望将其加入文档中 - 感谢您指出这一点!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接