私はこのようなグラフを持っています -
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クエリを理解しようとして鼻血が出始めたので、ここに来ることにしました。