|
![]() |
#1 |
Участник
|
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
|
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от gl00mie
![]() См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
![]() |
|
![]() |
#3 |
Участник
|
Бггг!!! Napalm, жжоте. Тупо жжоте.
Да, надо разделить вопрос: = Query vs while select = in vs range Query надо использовать ВСЕГДА! По построению - Query, это программный объект, который позволяет программисту при помощи методов строить и менять запрос. А также (!) использовать переменные условия на переменное число полей. UPD: в том числе добавлять таблицы и условия может и пользователь (!!!!), если ему дали такие права, а программист предоставил соответствующий диалог (как правило, пара методов). while select - немодифицируемый оператор языка. программист не может изменить запрос, написанный при помощи while select. Делать "переменный" или "модифицируемый" while select - это ссать против ветра. ====================== in - отсутствует в Аксапте в аксапте присуствует range, сводящийся к OR, AND, NOT использовать range на "большом числе условий" - ссать против ветра. можно, но мокро. В Аксапте предлагается использовать временную (в некоторых случаях постоянную) таблицу. См. обсуждения вариантов. =============================== Цитата:
![]() Бггг... туда же ![]() Цитата:
даже до того, как вы упретесь в ограничение длины строки, SQL перестанет оптимизировать план запроса для очень большого числа условий. странно даже, вроде в реальной жизни никто ножом дрова не колет... а колуном не затачивает карандаши... а с select и Query - полно желающих. Последний раз редактировалось mazzy; 12.10.2015 в 13:59. |
|
|
За это сообщение автора поблагодарили: Михаил Андреев (1), gl00mie (1), Weez (1), Cardagant (1). |
![]() |
#4 |
Участник
|
|
|
![]() |
#5 |
Участник
|
Цитата:
Но иногда бывает, к примеру, нужно сделать форму, которая представляет собой ограничение записей одного набора таблиц по мультиселекту записей вызывающией формы (когда количество выбранных записей может быть любым, соответственно критерий заранее неизвестной длины). В данном случае, на мой взгляд, предложенный мною вариант подошёл бы. Последний раз редактировалось Cardagant; 13.10.2015 в 13:58. |
|
![]() |
#6 |
Участник
|
Цитата:
Сообщение от Cardagant
![]() mazzy, хотел бы пояснить. Вы абсолютно правы и я даже и не думал не соглашаться по поводу того, что квери очень даже полезен в использовании в большинстве случаев.
Но иногда бывает, к примеру, нужно сделать форму, которая представляет собой ограничение записей одного набора таблиц по мультиселекту записей вызывающией формы (когда количество выбранных записей может быть любым, соответственно критерий заранее неизвестной длины) из другой. В данном случае, на мой взгляд, предложенный мною вариант подошёл бы.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
![]() |
#7 |
Участник
|
Цитата:
Здесь акцент был на том, что есть случаи, когда query недостаточен для решения задачи. |
|
|
Опции темы | Поиск в этой теме |
Опции просмотра | |
|