Подзапрос и GroupBy в Azure cosmosDB - PullRequest
0 голосов
/ 08 мая 2020

У меня ситуация, когда мне нужно получить элемент контейнера на основе подзапроса GroupBy. Это выглядит просто, но для меня не работает. Помощь приветствуется! Ниже приведен запрос sql

SELECT * FROM my_container 
WHERE my_container.item.Id 
IN (SELECT VALUE c.item.Id FROM c WHERE c.item.name = 'ABC'
    GROUP BY c.item.Id ) 

Выдает ошибку, так как он находится в неправильном допустимом формате . IN ('a', 'b')

Мои элементы my_container выглядят примерно так:

[
  {
    item : {
        name: "ABC",
        id: "1",
        address1: "address1",
        city: "city1"
    },
    item : {
        name: "ABC",
        id: "2",
        address1: "address2",
        city: "city2"
    },
    item : {
        name: "ABC",
        id: "3",
        address1: "address3",
        city: "city3"
    },
  }
]

1 Ответ

0 голосов
/ 12 мая 2020

Результатом вашего подзапроса является массив [], но ключевое слово IN просто поддерживает (). Я пробовал это sql:

SELECT * FROM c WHERE ARRAY_CONTAINS((SELECT VALUE c.item.id FROM c WHERE c.item.name = 'ABC' GROUP BY c.item.id),c.item.id,false)

Но он получает 0 строк. Причина в том, что функция ARRAY_CONTAINS () не поддерживает подзапрос в качестве аргумента. В качестве обходного пути: вы должны использовать 2 sql для достижения цели.

Сначала выполните sql SELECT VALUE c.item.id FROM c WHERE c.item.name = 'ABC' GROUP BY c.item.id, чтобы получить массив выходов [].

Затем передайте результат вам на первом шаге перейдите к ARRAY_CONTAINS () и выполните следующую команду sql

SELECT * FROM c WHERE ARRAY_CONTAINS(['1','2','3'],c.item.id,false)

Кстати, подзапрос в базе данных cosmos, в отличие от базы данных отношений. Подробнее о подзапросе см. здесь документ .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...