neo4j:重写union返回的比它应该返回的更多

n3h0vuf2  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(260)

我正在将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,开始使用名称本身。我做了两个cypher查询,第一个很好,但第二个不行:
第一个:

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
由于该项目是葡萄牙语的,我将提供相关单词的词典:
参与者->参与者
电影->电影
fotografia->照片
temator->hasactor公司
Temdor->hasdirector公司
名称->名称
任何帮助都将不胜感激:)

izj3ouym

izj3ouym1#

你得过去 fWITH 条款:

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 将被视为一个新变量,它可以绑定到任何节点,而不仅仅是正义联盟的电影。

相关问题