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

时间:2013-10-16 12:28:12

标签: neo4j cypher

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

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 个答案:

答案 0 :(得分:5)

这是合法的。

DISTINCT删除了由DISTINCT子句中未提及的属性进行排序的可能性,正则它们可能会被折叠(例如,如果有3条记录,post.CreationTime集中在一个帖子中.Id桶有DISTINCT,哪一个应该是订购?)。要获得有效的查询,请在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以使其成为文档 - 感谢您指出它!