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