Neo4j:重写UNION返回的次数应该更多

时间:2018-01-14 17:33:05

标签: mysql neo4j cypher union

我正在将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

由于该项目是葡萄牙语,我将提供相关单词的词典:

  • Participante - &gt;参与者
  • Filme - &gt;电影
  • Fotografia - &gt;照片
  • temAtor - &gt; hasActor
  • temRealizador - &gt; hasDirector
  • Nome - &gt;名称

任何帮助都会有很大帮助:)

1 个答案:

答案 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 电影。