у меня есть два графика построены так:Neo4j: Cypher запрос возвращает повторяющиеся результаты
CREATE (level1a:Bug {name: 'a'})
CREATE (level1b:Bug {name: 'b'})
CREATE (level2c:Bug {name: 'c'})
CREATE (level2d:Bug {name: 'd'})
CREATE (level3e:Bug {name: 'e'})
CREATE (level3f:Bug {name: 'f'})
CREATE (level3g:Bug {name: 'g'})
CREATE (level3h:Bug {name: 'h'})
CREATE (level1a)-[:LINK]->(level2c)
CREATE (level1b)-[:LINK]->(level2d)
CREATE (level2c)-[:LINK]->(level3e)
CREATE (level2c)-[:LINK]->(level3f)
CREATE (level2d)-[:LINK]->(level3g)
CREATE (level2d)-[:LINK]->(level3h)
А также можно посмотреть здесь: http://console.neo4j.org/?id=duplicate_bug2
Когда я выполнить запрос:
MATCH (a:Bug {name: 'a'})-[:LINK]->()-[:LINK]->(end) return end
Я получаю ожидаемые два узла (f и e). Но если я делаю два совпадающих запроса, например:
MATCH (a:Bug {name: 'a'})-[:LINK]->()-[:LINK]->(end)
MATCH (b:Bug {name: 'b'})-[:LINK]->()-[:LINK]->(end2)
return end, end2
Я получаю дубликаты узлов в конце и в конце2. Почему это? Два графика не связаны даже!
BR, S
Куда можно комбинировать результирующий набор? Даже если я вернусь только к концу, он все равно будет содержать дубликаты. – sgadrian
Для каждого результата в первом матче выполняется второе совпадение. Поскольку две строки выполняются дважды. Поскольку второе совпадение также создает две строки, конечным результатом является четыре строки. Я согласен, что язык в оригинальном ответе неуклюжим, поэтому я его изменил. –