У меня есть класс, который содержит поле LINKMAP, называемое ссылками. Этот класс рекурсивно используется для создания произвольных иерархических группировок (что-то вроде примера временных рядов, но без фиксированной структуры год/месяц/день).
Такой запрос:
select expand(links['2017'].links['07'].links['15'].links['10'].links) from data where key='AAA'
Возвращает фактические записи, содержащиеся в последнем слое «ссылок». Это работает именно так, как ожидалось.
Но такой запрос (обратите внимание на 10,11 во втором и последнем слое «ссылок»):
select expand(links['2017'].links['07'].links['15'].links['10','11'].links) from data where key='AAA'
Вместо этого возвращает две строки последнего слоя «ссылок»:
{"1000":"#23:0","1001":"#24:0","1002":"#23:1"} {"1003":"#24:1","1004":"#23:2"}
Использование unionAll или intersect (с UNWIND или без него) приводит к этой единственной записи:
[{"1000":"#23:0","1001":"#24:0","1002":"#23:1"},{"1003":"#24:1","1004":"#23:2"}]
Но ничто из того, что я пробовал (включая различные попытки «составных» SELECT), не заставит расширение работать так же, как в исходном примере (т.е. вернуть фактические записи, представленные в последнем LINKMAP).
Есть ли синтаксис SQL, который позволит это сделать?
Примечание. Даже этот (слегка измененный) пример из документов ODB не приводит к списку связанных записей:
select expand(records) from
(select unionAll(years['2017'].links['07'].links['15'].links['10'].links, years['2017'].links['07'].links['15'].links['11'].links) as records from data where key='AAA')
Ссылка: https://orientdb.com/docs/2.2/Time-series-use-case.html