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关键字。

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

我正在使用 Neo4j 2.0.0-M05。有任何想法吗?

谢谢!

4

1 回答 1

5

这是合法的。

DISTINCT 消除了按 DISTINCT 子句中未提及的属性排序的可能性,因为它们可能会被折叠(例如,如果有 3 条带有 post.CreationTime 的记录集中到一个带有 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以使其进入文档 - 感谢您指出!

于 2013-10-17T09:20:57.237 回答