Neo4J正在尝试查找具有匹配属性值的所有节点

Neo4J正在尝试查找具有匹配属性值的所有节点,neo4j,cypher,cql,Neo4j,Cypher,Cql,我与学生和他们正在参加的课程有一个数据库。目标是找到所有参加相同课程的姓氏相同的学生,并返回他们的名字和课程名称(s:学生)-[r:注册]->(c:课程) 我已经尝试了很多想法,但我相信我仍然在思考SQL 考虑到关系,如何在同一类的节点之间比较相同的属性值?我在谷歌上搜索过,但没有找到答案 试着不要过多地贬低我,我刚刚开始学习这件事。 提前感谢。因此,我认为这个查询应该可以: // match students and courses when students have the same na

我与学生和他们正在参加的课程有一个数据库。目标是找到所有参加相同课程的姓氏相同的学生,并返回他们的名字和课程名称<代码>(s:学生)-[r:注册]->(c:课程)

我已经尝试了很多想法,但我相信我仍然在思考SQL

考虑到关系,如何在同一类的节点之间比较相同的属性值?我在谷歌上搜索过,但没有找到答案

试着不要过多地贬低我,我刚刚开始学习这件事。
提前感谢。

因此,我认为这个查询应该可以:

// match students and courses when students have the same name
MATCH (s1:Student)-[:ENROLLEDIN]->(c1:Course),
        (s2:Student)-[:ENROLLEDIN]->(c2:Course)
WHERE s1.lastname = s2.lastname
// order by c1
WITH s1, s2, c1, c2 ORDER BY c1
// collect c1 as c1s, order by c2
WITH s1, s2, c2, collect(c1) AS c1s ORDER BY c2
// collect c2 as c2s. Pass to the next context when
// c1s = c2s. The array order matters.
WITH s1, s2, collect(c2) as c2s, c1s 
WHERE c1s = c2s
RETURN s1.firstName, s2.firstName, c1s

下面是一个简单的查询,用于查找参加同一课程的所有姓氏相同的学生:

MATCH (s1:Student)-[:ENROLLEDIN]->(c1:Course),(s2:Student)-[:ENROLLEDIN]->(c2:Course)
WHERE s1.lastName = s2.lastName AND c1.name = c2.name
RETURN DISTINCT s1.firstName, c2.name ORDER BY s1.firstName;

你可以在这里检查:我认为你应该更具体地描述你想要的结果。你能澄清你想要什么吗?对于每门课程,你想知道所有姓氏相同的学生的名字吗?或者,你是在寻找那些姓氏相同的人所修的所有普通课程的结果?还是别的什么?一旦您明确了所需的输出和行为,我们就可以为您提供更准确的查询。