Всем спасибо за ответы в соседней теме,
вот еще одна интересная и полезная задача.
нужно выкверить записи с false в каком-то флаг-булеане, после чего собрать из лукап поля полученных записей Сет ID связанных записей - что, собственно, и является задачей - найти список связанных записей.
И штука в том, что самих записей может вернутся десятки тысяч, а вот связаны они будут только с десятком рилейт записи.
Т.е. мне нужно выкверить тысячи записей, чтоб проверить каждую и составить Сет АйДи десяти связанных записей. Можно все так и сделать, но количество записей может стукнуть лимиты.
И было бы гораздо проще, если бы квери вернула только те записи у которых флаг в фальсе и значение в лукапе поле "уникальное" в том смысле что без повторов в текущей выборке. В таком случае я бы получил в квери количество записей равное количеству связаных записей (которые мне и нужны то) - что гораздо лучше
но не знаю как это реализовать, не вижу в агрегатных функциях подходящей, вроде Select UNIQUE(LookUpField) From... Where Flag = false
есть идеи?
Вложенный запрос не прокатит?
select id from Parent where id in (select id from child where Flag = false)
Прокатит!
я что-то не подумал, что там можно "плясать от печки", т.е. от самого связанного объекта
А разве часть с уникальностью не остаётся? Если только там не "один к одному"
смотри на квери:
select id from UpperObject where id in :(select LookUp from RelatedObject where Flag = false)
как я понимаю, хитрость в том, что вложенное квери вернет множество повторяющихся ID в "LookUp" поле,
а вот основное кверни вернет только уникальные (не повторяющиеся записи) UpperObject объекта, то есть фактически List<ID> в "LookUp" поле превращен в Set<ID> в "id" поле. Разве не так?
Что-то я недопонял с "уникальностью"... Я думал вам нужен список child-записей с уникальными parent lookup'ами, а вам нужны были parent-записи на которые есть ссылки из child-объектов, где child.flag = false.
PS: можно и так: select count(Id), LookUp from RelatedObject where Flag = false group by LookUp
Интересно только что будет работать быстрее.
правильно
а вот это именно то хитрое агрегатное квери о котором я спрашивал в начале:
не знаю, работает ли это, но выглядит очень хитро
Нормально выглядит. Просто в обычных проектах редко используется группировка и поэтому не держишь такое в голове. У теоретиков или людей на бенче такое вопросов вообще не вызывает.