Объедините два результата запроса с разными столбцами в один - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь объединить / объединить 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 голосов
/ 16 октября 2019

Я думаю, что решил это. Хитрость заключается в том, чтобы создать пустые столбцы для выравнивания имен столбцов, чтобы UNION мог работать: Добавить: NULL как r2 и NULL как r3 с определенным возвращением.s

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
...