我是Neo4J的新手,我无法完成这个简单的查询工作。 我的数据看起来像这样:
(a)-[:likes]->(b)
(a)-[:likes]->(c)
现在我想向每个喜欢别人的人提取一份清单。
尝试
match (u)-[:likes]->(p) return u order by p.id desc;
这给了我一份(a)的副本。 我尝试使用distinct:
match (u)-[:likes]->(p) return distinct u order by p.id desc;
这给了我变量p undefined'。
我知道,如果我放弃顺序,那么不同的作品会给我(a)一次。
但是我怎样才能在同一时间处理不同的秩序?
答案 0 :(得分:1)
请考虑您的查询无效的原因:
如果没有不同的,则每行都有u和p的行。当你使用DISTINCT时,如果同一个u有多行,匹配多个p,它应该如何排序?那是一项不可能完成的任务。
如果你把它改成u.id的顺序,那么它就可以了。
顺便说一句,我建议您使用标签将查询限制为仅限于相关节点。您还可以重新编写查询,以防止它发出重复项,并完全避免使用DISTINCT。
如果我们假设您感兴趣的节点标有:Person,则您的查询可能是:
MATCH (p:Person)
WHERE EXISTS( (p)-[:likes]-() )
RETURN p ORDER BY p.id DESC