いくつかの階層関係 (PARENT 関係として) を持つノードのセットをモデル化していますが、さらにいくつかの非階層関係があります。
簡単にするために、各人の出身国との関係を持つ家系図としましょう
したがって、各出身国がノードであり、各人がノードであり、暗号で次のような関係を作成できます。
start parent=node(123), child=node(456)
create parent-[:PARENT]->child;
と
start person=node(123), country=node(789)
create person-[:BORN_IN]->country;
私がやりたいのは、たとえば、イギリス出身の祖先を持たない人々、または日本出身の祖先を持つ人々などのリストを取得することです。これは合理的なクエリであるべきだと思いますが、私はサイファーが初めてで、それを構築する方法がわかりません。
更新 ** ケースをさらに広範囲にテストした結果、一部のクエリが正確に機能しないことがわかりました。片方の親がイギリス出身で、祖父母がイギリス出身ではない子供の場合、イギリス出身の祖先を持たない子供のクエリは、イギリス出身の親を持つ子供を誤って返します。私がクエリを書いた方法のように見えます.祖父母がイングランドとNULLの関係を持っていることを返します. 私のクエリは次のとおりです。
START n=node(*), ancestor=node(123)
MATCH n-[r:PARENT*]->o-[b?:BORN_IN]->ancestor
WHERE b IS NULL
RETURN DISTINCT n;
すべての人の先祖がその国で生まれた場合、それは問題なく機能します。