Найти внешнее объединение двух neq4j CQL-запросов - PullRequest
0 голосов
/ 06 февраля 2020

У меня есть 2 CQL-запроса: -

MATCH (OX:OrderX) 
MATCH (OXT:OrderXType) 
WHERE OX.OrderXTypeID=OXT.OrderXTypeID
AND OXT.SourceTypeID="1"  
RETURN OX.OrderXID,OX.IdentifierID;

и

MATCH (OX:OrderX)
MATCH (OXT:OrderXType)
WHERE OX.OrderXTypeID=OXT.OrderXTypeID
AND OXT.SourceTypeID="2"
RETURN OX.OrderXID,OX.IdentifierID;

С выходами: -

╒═════════════╤═════════════════╕
│"OX.OrderXID"│"OX.IdentifierID"│
╞═════════════╪═════════════════╡
│"-2147483640"│"-2147483644"    │
├─────────────┼─────────────────┤
│"-2147483639"│"-2147483643"    │
└─────────────┴─────────────────┘

И

╒═════════════╤═════════════════╕
│"OX.OrderXID"│"OX.IdentifierID"│
╞═════════════╪═════════════════╡
│"-2147483643"│"-2147483643"    │
├─────────────┼─────────────────┤
│"-2147483641"│"-2147483641"    │
├─────────────┼─────────────────┤
│"-2147483642"│"-2147483642"    │
└─────────────┴─────────────────┘

Я хочу получить результат как externaljoin для OX.IdentifierID (s).

Предпочтительный результат: -

"- 2147483641", "- 2147483642", "- 2147483644"

1 Ответ

1 голос
/ 06 февраля 2020

[ОБНОВЛЕНО]

Вы можете использовать функцию APO C apo c .coll.disjunction , чтобы получить дизъюнкцию 2 списков ввода.

Например:

OPTIONAL MATCH (x1:OrderX), (t1:OrderXType)
WHERE t1.SourceTypeID = "1" AND x1.OrderXTypeID = t1.OrderXTypeID
WITH COLLECT(DISTINCT x1.IdentifierID) AS x1s
OPTIONAL MATCH (x2:OrderX), (t2:OrderXType)
WHERE t2.SourceTypeID = "2" AND x2.OrderXTypeID = t2.OrderXTypeID
RETURN apoc.coll.disjunction(x1s, COLLECT(DISTINCT x2.IdentifierID))

ПРИМЕЧАНИЕ. В этом примере используется DISTINCT, чтобы минимизировать размер 2 списков, передаваемых в функцию APO C. Но это действительно необязательно, так как apoc.coll.disjunction все равно вернет список с различными значениями.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...