У меня есть такая структура данных в моем документе (обратите внимание, что это упрощено для краткости):
{
"id": "c1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1",
"name": "Bruce Banner",
"accountId": "a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1",
"contributors": [{
"accountId": "a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2",
"type": "Foo"
},{
"accountId": "a3a3a3a3-a3a3-a3a3-a3a3-a3a3a3a3a3a3",
"type": "Bar"
}]
},
{
"id": "c2c2c2c2-c2c2-c2c2-c2c2-c2c2c2c2c2c2",
"name": "Tony Stark",
"accountId": "a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2",
"contributors": [{
"accountId": "a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1",
"type": "Fizz"
}]
},
Я пытаюсь написать запрос, который извлекает документы, в которых предоставленный accountId
находится либо в родительской записи, либо в массиве contributors
:
SELECT e.id, e.accountId, e.name
FROM Entitity e
JOIN co IN e.contributors
WHERE e.accountId = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
OR co.accountId = 'a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1'
Результат:
[{
"id": "c1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1",
"accountId": "a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1",
"name": "Bruce Banner"
},{
"id": "c1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1",
"accountId": "a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1",
"name": "Bruce Banner"
},{
"id": "c2c2c2c2-c2c2-c2c2-c2c2-c2c2c2c2c2c2",
"accountId": "a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2",
"name": "Tony Stark"
}]
Как видите, первый объект (Bruce Banner
) дублируется. Если я удалю пункт JOIN
, он будет работать правильно. Может ли кто-нибудь сказать мне, почему это так, и как я могу избежать дублирования?
Изменить. Для ясности, это мой ожидаемый ответ:
[{
"id": "c1c1c1c1-c1c1-c1c1-c1c1-c1c1c1c1c1c1",
"accountId": "a1a1a1a1-a1a1-a1a1-a1a1-a1a1a1a1a1a1",
"name": "Bruce Banner"
},{
"id": "c2c2c2c2-c2c2-c2c2-c2c2-c2c2c2c2c2c2",
"accountId": "a2a2a2a2-a2a2-a2a2-a2a2-a2a2a2a2a2a2",
"name": "Tony Stark"
}]