提问者:小点点

Neo4j Cypher查询:返回DISTINCT时的“未知标识符”


为什么此查询有效(尽管存在重复行):

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

这个没有(它返回错误未知标识符'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关键字。

我通过使用找到了一个解决方法,但在我看来,我不应该这样做。

我正在使用Neo4j 2.0.0-M05。有什么想法吗?

谢谢!


共1个答案

匿名用户

这是合法的。

DISTINCT消除了按DISTINCT子句中未提及的属性排序的可能性,因为它们可能会折叠(例如,如果post. CreationTime有3条记录与DISTINCT合并到一个post.Id桶中,应该按哪个排序?)。要获得工作查询,请在DISTINCT中包含post.CreationTime,例如:

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以使其进入文档-感谢您指出!