我有一个看起来像这样的图表 -
customer-hasOrder->order
order-hasLineItem->orderLineItem
orderLineItem-hasService->service
orderLineItem-providedOn->providedOnDate
orderLineItem-providedBy->vendor
我需要确定是否在某个日期向某个客户提供了一项特定服务,比如名为“A”的服务,而没有另一项服务,比如名为“B”的服务,同一供应商也在同一日期提供。无论客户在某一天提交了多少订单,这都应该是正确的。换句话说,只要客户订购“A”,服务“A”就应始终与服务“B”在同一天由同一供应商提供。
这是我必须找到在同一天有“A”但没有“B”的客户 -
START
s1 = node:service(id="A"),
s2 = node:service(id = "B"),
MATCH
customer-[:hasOrder]->(o1)-[:hasLineItem]->li1-[:hasService]->s1,
customer-[:hasOrder]->(o2)-[:hasLineItem]->li2-[r?:hasService]->s2,
ol1-[:providedBy]->p1,
ol2-[:providedBy]->p2,
ol1-[:providedOn]->d1,
ol2-[:providedOn]->d2
WHERE
d1 = d2 AND p1 = p2 AND r is null
RETURN customer
在我的鼻子开始流血试图弄清楚 Cypher 查询后,我决定来这里。