2013-10-16 19 views
5

为什么这个查询工作(尽管有重复行):Neo4j的暗号询问:“未知的标识符”时,返回不同的

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。有任何想法吗?

谢谢!

回答

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将它做成的文档 - 感谢它指向了!

+0

有道理。谢谢! –