Регистрация  |  Вход

Написать Query, возвращающее записи с "уникальными" (т.е. не повторяющимися) значениями в лукап поле

Всем спасибо за ответы в соседней теме,

вот еще одна интересная и полезная задача.

нужно выкверить записи с 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)

akr0bat
Вложенный запрос не прокатит?

Прокатит!

я что-то не подумал, что там можно "плясать от печки", т.е. от самого связанного объекта

[quote="akr0bat"]Вложенный запрос не прокатит? [/quote]

Прокатит!

я что-то не подумал, что там можно "плясать от печки", т.е. от самого связанного объекта

А разве часть с уникальностью не остаётся? Если только там не "один к одному"

А разве часть с уникальностью не остаётся? Если только там не "один к одному"

ilya leshchuk
А разве часть с уникальностью не остаётся?

смотри на квери:

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
Интересно только что будет работать быстрее.

ilya leshchuk
нужны были parent-записи на которые есть ссылки из child-объектов, где child.flag = false

правильно

а вот это именно то хитрое агрегатное квери о котором я спрашивал в начале:

ilya leshchuk
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]
не знаю, работает ли это, но выглядит очень хитро

Den Brown
не знаю, работает ли это, но выглядит очень хитро

Нормально выглядит. Просто в обычных проектах редко используется группировка и поэтому не держишь такое в голове. У теоретиков или людей на бенче такое вопросов вообще не вызывает.

[quote="Den Brown"]не знаю, работает ли это, но выглядит очень хитро[/quote]

Нормально выглядит. Просто в обычных проектах редко используется группировка и поэтому не держишь такое в голове. У теоретиков или людей на бенче такое вопросов вообще не вызывает.