2013-05-09 7 views
6

Chciałbym połączyć dwa żądania w jedno zapytanie i nie jestem pewien, co się dzieje, gdy 2 instrukcje dopasowania są używane w jednym kwerendy.jak używać dwóch instrukcji dopasowań w kwerendie cyfrowej

Powiedz, że mam listę znajomych i chciałbym zobaczyć listę moich znajomych z każdym z ich wujów i rodzeństwa wymienionych w kolekcji. Czy mogę mieć dwie instrukcje dopasowania, które wykonają zadanie? na przykład

match friends-[:childOf]->parents-[:brother]->uncles 
    , friends-[:childOf]->parents<-[:childOf]-siblings 
return friends, collect(siblings), collect(uncles) 

Jednak, jeśli zrobię kwerendę w ten sposób, to zawsze zwraca żadnych wyników.

+2

Czy możesz udostępnić przykładowy wykres za pośrednictwem http://console.neo4j.org/? –

Odpowiedz

7

Od wybrałeś już rodziców w pierwszej klasie meczu, można zrobić tak -

match friends-[:childOf]->parents-[:brother]->uncles 
with friends, parents, uncles 
match parents<-[:childOf]-siblings 
return friends, collect(siblings), collect(uncles) 
1

Możesz zrobić niektóre z tych relacji opcjonalne. Na przykład, jeśli znajdziesz rodzeństwo, ale nie znajdziesz żadnych wujków, to zapytanie zwróci wartość null, ponieważ nie spełnia obu klauzul zapamiętywania. Jeśli dodasz relacje końcowe jako opcjonalne, nie będziesz musiał całkowicie spełnić obu klauzul, aby zwrócić dane. A więc:

match friends-[:childOf]->parents-[?:brother]->uncles 
    , friends-[:childOf]->parents<-[?:childOf]-siblings 
return friends, collect(siblings), collect(uncles)