[OK]をので、ここで私のデータモデルです。各ユーザーは:ASSIGNED_TO
、さらに:ASSIGNED_TO
です。場所は:BELONGS_TO
です。取得不正な値は
私はIDで特定のアカウントを選択しようとしており、そのアカウントのユーザーと場所の数も返します。ここに私のクエリは次のとおりです。
MATCH (account:Account)
WHERE account.id = '123456'
WITH account
OPTIONAL MATCH (location:Location)-[:BELONGS_TO]->(account)
OPTIONAL MATCH (user:User)-[:ASSIGNED_TO]->(account)
RETURN account, count(location) as locationCount, count(user) as userCount
結果は、userCount = 16 (correct)
とlocationCount = 16 (incorrect; should be 1)
account
です。私がdistinct
を位置カウントに加えた場合は、count(distinct location)
、正しい結果が得られます(1)。ユーザーのためにOPTIONAL MATCH
を削除すると、ロケーションカウントも1になります。関係とアカウントとの関係がわかりましたが、私は別名のないクエリが機能しない理由を理解しようとしています。また、これを書く良い方法はありますか?
トム、返信ありがとうございます。私はそれが動的に生成されたため、私はそれが(ユーザーと場所のための別々の選択的なMATCHステートメント)として書かれたクエリを持っていた理由でした。私は 'withUsers'と 'withLocations'の引数を持っています。これは独立して設定できるので、最終クエリでどちらか一方または両方を持つことができます。私はその「別個の」作品を手に入れました。なぜなら、データベースに1つしかない場合、16の位置のカウントが返される理由を理解しようとしています。私はそれが16人のユーザーとの関係と関係があると思うが、なぜそれが当てはまるのか分からない。 – Jason
これは、あなたのカウントを決定している(アカウントごとにグループ化された)完全なパターンの一致数であり、(!!!)ユーザーまたは場所ではありません。それは20ヒットを発見した場合、あなたのカウントは20だったでしょう。 –