좋아, 그래서 여기에 내 데이터 모델이다. 각 사용자의 계정은 :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
이 결과는 account
하는 userCount = 16 (correct)
과 locationCount = 16 (incorrect; should be 1)
입니다 : 여기 내 쿼리입니다. 위치 카운트 에 distinct
을 추가하면 정확한 결과 (1)가 표시되고 사용자의 OPTIONAL MATCH
을 제거하면 위치 카운트 1을 얻게됩니다. 사용자 수와 관련이 있다는 것을 알고 있습니다. 관계를 계정 및 위치와 비교하지만 별개의 쿼리가 작동하지 않는 이유를 이해하려고합니다. 또한 이것을 작성하는 더 좋은 방법이 있습니까?
입니다. 답장을 보내 주셔서 감사합니다. 내가 쿼리를 작성한 이유는 (사용자 및 위치에 대한 별도의 선택적인 MATCH 문) 동적으로 생성 되었기 때문입니다. 나는 'withUsers'와 'withLocations'를 가지고 독립적으로 설정할 수 있으므로 최종 쿼리에서 둘 중 하나 또는 둘 다를 가질 수 있습니다. 나는 '뚜렷한'작품을 얻었고, 왜 데이터베이스에 하나만있을 때 16 개의 위치가 반환되는지 이해하려고 노력하고 있습니다. 나는 그것이 16 명의 사용자와의 관계와 관련이 있다고 생각하지만, 그것이 왜 그런지 알지 못합니다. – Jason
카운트를 결정하는 전체 패턴 (계정별로 그룹화), 일치하지 않는 (!!!) 사용자 또는 위치에 대한 일치 횟수입니다. 만약 20 번의 안타를 발견한다면 당신의 카운트는 20이 될 것입니다. –