|
08.10.2015, 12:37 | #1 |
Участник
|
IN фильтр в while select запросе?
Пользователь выбирает в мультиселекте набор значений.
Потом в коде есть while select , который надо отфильтровать по этому переданному набору значений. Я могу сделать врем таблицу,заполнить этим набором значений и потом join к while-select. Появились ли какие-то новые/более симпатичные способы, как это можно выполнить в AX2012? AX2012 R2 |
|
08.10.2015, 12:50 | #2 |
Участник
|
Query?..
|
|
08.10.2015, 12:58 | #3 |
Участник
|
спасибо, понятно, раз новых нет, старыми костылями придется пользоваться(
|
|
08.10.2015, 14:26 | #4 |
Участник
|
Query целиком и полностью подходит под данную задачу, и без всяких временных таблиц, зачем изобретать велосипед..
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
08.10.2015, 14:51 | #5 |
Участник
|
тк
1) while-select уже существует и переписывать существующую логику в query только для того, чтобы добавить доп условие на 1 поле - имхо, не умно 2) критерии из этого while-select только с extended query ranges можно попробовать запихнуть в query, но по пути еще можно огрести много отладки и багов .... Последний раз редактировалось kitty; 08.10.2015 в 14:59. |
|
08.10.2015, 15:24 | #6 |
Участник
|
|
|
08.10.2015, 17:07 | #7 |
Участник
|
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
08.10.2015, 18:18 | #8 |
Участник
|
|
|
08.10.2015, 18:42 | #9 |
Участник
|
Неправда, все работает абсолютно идентично while select, только удобней с точки зрения поддержки и изменения запроса. За редким исключением.
__________________
Существует 10 типов людей: одни понимают двоичную систему, другие - нет. |
|
08.10.2015, 15:16 | #10 |
Участник
|
Только, делайте временную таблицу TempDB
__________________
Axapta v.3.0 sp5 kr2 |
|
08.10.2015, 20:02 | #12 |
Участник
|
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
|
|
12.10.2015, 13:05 | #13 |
Участник
|
Цитата:
Сообщение от gl00mie
См. пример по ссылке:Код, выполняющий выборку с Query, получается совершенно не зависящим от того, сколько записей выбрано пользователем: 1, 10 или 1000. Все эти заморочки ложатся на код, который готовит Query: в каких-то случаях он может добавить фильтры прямо в запрос, причем добавить их довольно много, с учетом ограничения на результирующую длину SQL-запроса, в каких-то - может при-join-нить RecordReferenceList_RU. В случае же select'а в коде X++ такой гибкости нет: либо явно зашитое copy-paste'ом в код число фильтров, либо join с дополнительной таблицей.
|
|
12.10.2015, 13:41 | #14 |
Участник
|
Бггг!!! 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). |
12.10.2015, 17:22 | #15 |
Участник
|
|
|
13.10.2015, 13:48 | #16 |
Участник
|
Цитата:
Но иногда бывает, к примеру, нужно сделать форму, которая представляет собой ограничение записей одного набора таблиц по мультиселекту записей вызывающией формы (когда количество выбранных записей может быть любым, соответственно критерий заранее неизвестной длины). В данном случае, на мой взгляд, предложенный мною вариант подошёл бы. Последний раз редактировалось Cardagant; 13.10.2015 в 13:58. |
|
08.10.2015, 17:11 | #17 |
Участник
|
«У нас в клубе принято джентльменам верить на слово!» ©
|
|