Cypher - номер упорядоченного отношения - PullRequest
0 голосов
/ 07 июня 2018

Я спотыкаюсь о запросе шифра.Я хотел бы создать отношения, где есть неявный порядок, основанный на целочисленном свойстве на инструкцию.Например, я хотел бы сопоставить адрес_1 с адресом_2 и адрес_2 с адресом_3 и т. Д., Когда применяется условие WHERE.Вот попытка утверждения:

MATCH (i:Instruction), (i2:Instruction)
 WHERE i.address < i2.address AND i.vars_written = i2.vars_read
MERGE (i)-[r:USED_BY]->(i2)
RETURN i, i2, r

Проблема заключается в том, что адрес с меньшим номером будет сопоставляться со всеми другими адресами, которые соответствуют условию WHERE, а не только с соответствующими - создавая дополнительные отношения, где не должно бытьбыть, как с адреса_1 по адрес_3.

Одна инструкция может иметь несколько отношений USED_BY, но как только другая инструкция имеет такое же свойство vars_written, она должна начать новое отношение USED_BY.

Чтобы привести конкретный пример, рассмотрим следующие 4 узла:

Index 1 parameters: {
  address: 1
  vars_written: var_b
  vars_read: var_a
}

Index 2 parameters: {
  address: 2
  vars_written: var_c
  vars_read: var_b
}

Index 3 parameters: {
  address: 3
  vars_written: var_c      <- Same vars_written as Index 2
  vars_read: var_b
}

Index 4 parameters: {
  address: 4
  vars_written: var_e   
  vars_read: var_c         <- var_c was overwritten in Index 3, should NOT map to Index 2
}

Производит:

1 -[USED_BY]-> 2
1 -[USED_BY]-> 3
2 -[USED_BY]-> 4   (This should not be made because 3 should only map to 4!)
3 -[USED_BY]-> 4

1 Ответ

0 голосов
/ 07 июня 2018

Благодарим команду Neo4J за ответы на их канале Slack:

MATCH (i:Instruction), (i2:Instruction)
 WHERE i.address < i2.address AND i.vars_written = i2.vars_read
WITH i, i2 ORDER BY i2.address ASC // <-- order the i2 by it's address
WITH i, head(collect(i2)) as i2 // <-- collect all of the matches and take the first
MERGE (i)-[r:USED_BY]->(i2)
RETURN i, i2, r
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...