2014-11-04 4 views
1

У меня странная проблема. Я не могу понять, почему запрос Neo4j возвращает разные результаты.Почему запрос Neo4j не возвращает данные с первым запросом?

WITH shipper 
MATCH (shipper)<-[:SHIPPED_BY]-(shipment:ActiveShipment)-[:SHIP_TO_CITY]->(toCity) 
     <-[:HAS_CITY]-(toState:State), 
     **(veh:Vehicle)<-[:HAS_VEHICLE_TYPE]-(shipment)-[:SHIP_FROM_CITY]->(frmCity:City) 
     <-[:HAS_CITY]-(frmState:State)** 
RETURN shipment, toCity, frmCity, frmState, veh 

возвращает

enter image description here

но только делая небольшие изменения в запрос получает меня правильные результаты:

WITH shipper 
MATCH (shipper)<-[:SHIPPED_BY]-(shipment:ActiveShipment)-[:SHIP_TO_CITY]->(toCity) 
     <-[:HAS_CITY]-(toState:State), 
    (veh:Vehicle)<-[:HAS_VEHICLE_TYPE]-(shipment) 
**MATCH (shipment)-[:SHIP_FROM_CITY]->(frmCity:City)<-[:HAS_CITY]-(frmState:State)** 
RETURN shipment, toCity, frmCity, frmState, veh 

, который выглядит следующим образом

enter image description here

Только разница между отправлениями, которые не возвращаются из возвращенного, заключается в том, что они имеют одинаковые значения для числа и числа. Может кто-то, пожалуйста, помогите мне понять, в чем проблема с моим первым запросом?

UPDATE

его легко воспроизвести,

Create (st:State{Name:'ABC'})-[:HAS_CITY]->(c:City{Name:'XYZ'})<-[:SHIPPED_FROM]-(sh:Shipment{InternalId:1})-[:HAS_VEHICLE_TYPE]->(vh:Vehicle{Name:'Vheicle 1'}), (sh)-[:SHIPPED_TO]->(c)

теперь, если добавить этот запрос будет терпеть неудачу

MATCH (shipment:Shipment)-[:SHIPPED_TO]->(toCity) <-[:HAS_CITY]-(toState:State), (veh:Vehicle)<-[:HAS_VEHICLE_TYPE]-(shipment)-[:SHIPPED_FROM]->(frmCity:City)<-[:HAS_CITY]-(frmState:State) RETURN shipment, toCity, frmCity, veh

Я думаю, что проблема в том, что же Состояние появляется дважды, если я удалю его, Работа.

С уважением Киран

+0

ли вы иметь возможность поделиться график? Например. в console.neo4j.org/r/blank? –

+0

Единственное, что быстро приходит в голову, это то, что в одном MATCH каждое отношение разрешено только один раз, но с несколькими операторами соответствия вы удаляете это ограничение, чтобы оно могло снова совпадать с теми же отношениями. –

+0

@MichaelHunger Я обновил вопрос, чтобы привести пример. – Kiran

ответ

0

Право же город, имеющий такое же отношение к тому же состоянию,

, как это только дополнительная информация, вы можете также вытянуть ее в отдельном пункте матча.

как здесь:

MATCH (shipment:Shipment)-[:SHIPPED_TO]->(toCity)<-[:HAS_CITY]-(toState:State),(veh:Vehicle)<-[:HAS_VEHICLE_TYPE]-(shipment)-[:SHIPPED_FROM]->(frmCity:City) 
MATCH (frmCity)<-[:HAS_CITY]-(frmState:State) 
RETURN shipment, toCity, frmCity, veh 
Смежные вопросы