web-dev-qa-db-ja.com

複数のMATCH句とCypherクエリのカンマの違いは何ですか?

Neo4jのCypherクエリ言語で、次のように1つのMATCH句と別のMATCH句の違いは何ですか?

MATCH (d:Document{document_ID:2})
MATCH (d)--(s:Sentence)
RETURN d,s

同じMATCH句のコンマ区切りパターンとの違いは何ですか?例えば。:

MATCH (d:Document{document_ID:2}),(d)--(s:Sentence)
RETURN d,s

この単純な例では、結果は同じです。しかし、「落とし穴」はありますか?

34
Gene M

違いがあります。コンマ区切りの一致は、実際には同じパターンの一部と見なされます。したがって、たとえば、各リレーションシップが結果のパスに1回だけ出現するという保証は、ここで支持されます。

個別のMATCHは、パスが単一のパターンを形成せず、これらの保証がない個別の操作です。

22
Michael Hunger

これらの間に違いはありませんただし、句が相互にリンクされていない場合

これを行った場合:

MATCH (a:Thing), (b:Thing) RETURN a, b;

それは同じです:

MATCH (a:Thing) MATCH (b:Thing) RETURN a, b;

なぜならabは独立しているからです。 abが関係によってリンクされている場合、クエリの意味が変わる可能性があります。

4
FrobberOfBits

クエリの一部に複数の切断されたパターンが含まれている場合、これらのすべての部分の間にデカルト積が作成されます。これにより、大量のデータが生成され、クエリ処理が遅くなる可能性があります。たまに意図されていますが、おそらく異なる部品間の関係を追加するか、OPTIONAL MATCH(識別子は(a))を使用することによって、このクロス積の使用を回避するクエリを再構成することがしばしば可能です。要するに、この2つのクエリに違いはありませんが、非常に慎重に使用しました。

0
Akshay Vakharia