将两个具有不同列的查询结果合并为一个

时间:2019-10-16 06:48:05

标签: neo4j combinations union

我正在尝试合并/组合具有不同关系类型的2个查询结果,这些关系类型之后应保持分开(子查询r2,r3的列名称不同)。我想获得带有c,p,r2,r3的输出图。

我尝试了以下密码查询:

MATCH (p:Sample)-[r3:`Age`]->(c:Sample)
WHERE
r3.age >= 50
RETURN p, r3, c 
UNION 
MATCH (p:Sample)-[r1:`Age`]->(c:Sample)
MATCH (p:Sample)-[r2:`Size`]->(c:Sample)
WHERE
(r2.size <= 50 and r1.age >= 20)
return p, r2, c

错误消息是:

Neo.ClientError.Statement.SyntaxError: All sub queries in an UNION must have _
the same column names (line 5, column 1 (offset: 98))
"UNION "

结果应如下表所示:

    p |   r2  | r3   | c 
  ------------------------
   p1 |       | sth  | c1
   p1 |  sth  |      | c1 
   ...|  ...  |  ... | ...

1 个答案:

答案 0 :(得分:0)

我想我解决了。诀窍是创建空列以对齐列名,以便UNION可以工作: 添加: NULL为r2 NULL为r3 到特定的收益。

MATCH (p:Sample)-[r3:`Age`]->(c:Sample)
WHERE
r3.age >= 50
RETURN p, NULL as r2,  r3, c

UNION 

MATCH (p:Sample)-[r1:`Age`]->(c:Sample)
MATCH (p:Sample)-[r2:`Size`]->(c:Sample)
WHERE
(r2.size <= 50 and r1.age >= 20)
return p, r2, NULL as r3, c