我正在将MySQL数据库迁移到Neo4j数据库,但我无法正确重写此查询。
MySQL查询:
SELECT ID, Nome, Fotografia
FROM Participante AS pa
INNER JOIN Filme_temAtor_Participante AS fa ON fa.Participante_ID = pa.ID
WHERE fa.Filme_ID = 1
UNION
SELECT ID, Nome, Fotografia
FROM Participante AS pr
INNER JOIN Filme_temRealizador_Participante AS fr ON fr.Participante_ID = pr.ID
WHERE fr.Filme_ID = 1
ORDER BY Nome ASC;
从SQL到Neo4j我停止使用id并开始使用名称本身。我做了2个密码查询,第一个工作正常,但第二个没有:
第一个:
MATCH(f:Filme {Titulo: "Justice League"})
MATCH(a:Participante)<-[:TEM_ATOR]-(f)
MATCH(b:Participante)<-[:TEM_REALIZADOR]-(f)
RETURN a,b;
第二个:
MATCH(f:Filme {Titulo: "Justice League"})
MATCH(a:Participante)<-[:TEM_ATOR]-(f)
WITH COLLECT({Nome:a.Nome,Fotografia:a.Fotografia}) AS atores
MATCH(b:Participante)<-[:TEM_REALIZADOR]-(f)
WITH atores + COLLECT({Nome:b.Nome,Fotografia:b.Fotografia}) AS ps
UNWIND ps AS p
RETURN p.Nome, p.Fotografia;
输出如下: output
由于该项目是葡萄牙语,我将提供相关单词的词典:
任何帮助都会有很大帮助:)
答案 0 :(得分:1)
您必须在f
子句中传递WITH
:
MATCH(f:Filme {Titulo: "Justice League"})
MATCH(a:Participante)<-[:TEM_ATOR]-(f)
WITH f, COLLECT({Nome:a.Nome,Fotografia:a.Fotografia}) AS atores
MATCH(b:Participante)<-[:TEM_REALIZADOR]-(f)
WITH atores + COLLECT({Nome:b.Nome,Fotografia:b.Fotografia}) AS ps
UNWIND ps AS p
RETURN p.Nome, p.Fotografia;
如果你没有传递它,f
将被视为一个新变量,它可以绑定到任何节点,而不仅仅是 Justice League 电影。