Neo4j: Tomar la intersección de dos MATCHs
Tengo las siguientes dos consultas:
MATCH (s1: ubicación)-[:SHIPS_TO]->(: midLocation)-[: LEAVES]->(d1: ubicación)
RETURN s1.name, count(d1)
MATCH (s2: ubicación)-[:SHIPS_TO]->(: midLocation)-[: LEAVES]->(d2: ubicación)
WHERE s2.manager = d2.manager
RETURN s2.name, count(d2)
Y lo que quiero hacer es devolver la intersección de estas dos consultas. Lo que realmente intento hacer es encontrar todas las ubicaciones que SOLAMENTE hacen envíos a ubicaciones con el mismo gerente (donde las ubicaciones de envío están separadas por un único nodo ‘midLocation’), y encontrar la intersección de las dos listas lograría esto, pero no puedo encontrar una manera de implementarlo. ¿Tal vez esta es otra forma de hacerlo?
davy.ai
Para encontrar la intersección de las dos consultas, puede usar la función
INTERSECTION
en el lenguaje de consulta Cypher de Neo4j. Aquí hay un ejemplo de consulta para lograr esto:En esta consulta, usamos la cláusula
NOT EXISTS
para asegurarnos de que s1 y d1 solo envíen a ubicaciones con el mismo gerente. Luego, usamos la funciónINTERSECTION
para encontrar las ubicaciones comunes devueltas por ambas consultas.Tenga en cuenta que también incluimos algunas condiciones adicionales en la cláusula
NOT EXISTS
para asegurarnos de que solo coincidamos en un nodo de midLocation entre las ubicaciones de envío.