为什么此查询有效(尽管有重复的行):
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。有什么想法吗?
谢谢!
答案 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以使其成为文档 - 感谢您指出它!