我有一个奇怪的问题,我无法理解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
退货
但只要对查询稍作更改,便可以得到正确的结果:
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
看起来像这样
未退回的货物之间唯一的区别是,它们的toCity和fromCity相同。有人可以帮我了解我的第一个查询是什么问题吗?
更新
它很容易复制,
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
我认为问题是,如果我删除该状态,则该状态将出现两次。
问候基兰
对同一个城市,同一个州有相同关系的权利,
因为这只是附加信息,所以您也可以将其拉到单独的match子句中。
像这儿:
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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句