Как я могу написать этот SQL запрос в CYPHER? - PullRequest
0 голосов
/ 05 марта 2020

Это следующий SQL Запрос

select count(distinct Descendent_id) from
(
select * 
from v.ABC a
left join v.XYZ b
on a.Target_id=b.Ancestor_id
) t
where t.Target_id = 1234;

Редактировать

На самом деле нет никакой связи между двумя таблицами / узлами. Я объясню -

Давайте предположим, что в таблице B есть Ancestor_Id и Descendent_id , которые имеют некоторую связь между ними, которую мы можем назвать ее [children]

Ancestor_Id - 101 - [children] -> Descendent_Id - 101.1

Ancestor_Id - 101 - [children] -> Descendent_Id - 101.2


Таблица A имеет только Target_Id , которые соответствуют таблице B, например, Таблица A - Target_Id = 101 | Таблица - B Ancestor_Id = 101

Примечание -

Таблица A не имеет никакого отношения к таблице B.

Поэтому мне нужно присоединиться к две таблицы / узлы с Target_Id и Ancestor_ID , и в конечном итоге я хочу получить DISTINCT COUNT Descendent_Id из таблицы B, которая имеет отношение [children] с Ancestor_Id.


Также из запроса SQL, если вы видите, что в Descendent_id нет псевдонима, как b.Descendent, как мне добиться того же в Neo4j.


Пожалуйста, дайте мне знать, если я все еще не устранил сомнение должным образом.

Я очень новичок в CYPHER - Neo4j, ПОЖАЛУЙСТА, ПОМОГИТЕ!

1 Ответ

1 голос
/ 05 марта 2020

[ОБНОВЛЕНО]

Следующий Cypher получит количество различных значений D_id в «левом соединении» узлов abc и xyz, имеющих указанный идентификатор.

MATCH (a:abc) WHERE a.id = $id
OPTIONAL MATCH (b:xyz) WHERE b.abc_id = $id
WITH COLLECT(a.D_id)+COLLECT(b.D_id) AS ids
UNWIND ids AS id
RETURN COUNT(DISTINCT id) AS D_id_count

Я предполагаю, что узлы abc хранят идентификатор в свойстве id, а узлы xyz хранят его в свойстве abc_id. Я также предполагаю, что желаемое значение идентификатора передается как id параметр .

Примечание: этот запрос будет быстрее, если вы создадите indexes on:

  • :abc(id)
  • :xyz(abc_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...