AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 01.07.2020, 14:58   #1  
Metrofun is offline
Metrofun
Участник
 
72 / 10 (1) +
Регистрация: 27.04.2020
? Использование Union
Здравствуйте.
Axapta 3.0.
Нужно сделать объединение данных двух select'ов.
Как я понимаю, это можно сделать в одном запросе только используя прямой запрос к базе используя Statement, UserConnection?
Используя оператор while select нельзя так сделать?
И через Query, QueryBuildDataSource тоже не получиться?
Старый 01.07.2020, 15:01   #2  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,867 / 3123 (112) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Только прямой запрос
Старый 01.07.2020, 17:05   #3  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,427 / 1771 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Ещё есть вариант с подменой текста запроса у View.
Подмена запроса для View

Последний раз редактировалось S.Kuskov; 01.07.2020 в 17:07.
Старый 01.07.2020, 23:03   #4  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Metrofun Посмотреть сообщение
Нужно сделать объединение данных двух select'ов.
Только нужно учесть, что запрос UNION настолько медленный, что может получиться быстрее данные двух запросов просто залить в одну временную табличку (временную на словах; в БД она должна быть постоянной).Но тут нужно исключать конфликт двух одновременно работающих пользователей над этим механизмом.
На малом объеме данных (когда вопрос подбора индексов неактуален) конечно можно и UNION-ом воспользоваться.
__________________
Возможно сделать все. Вопрос времени
Старый 02.07.2020, 15:33   #5  
online
Владимир Максимов
Участник
КОРУС Консалтинг
 
1,651 / 1158 (42) ++++++++
Регистрация: 13.01.2004
Записей в блоге: 3
Цитата:
Сообщение от Metrofun Посмотреть сообщение
Используя оператор while select нельзя так сделать?
Если у Вас While select, то почему просто не сделать 2 последовательных while select? Формально - это и будет UNION ALL. Если же надо исключать дубли, то это добавить объект Set и отслеживать через него факты повторов по ключевым полям

Собственно, Вы же все-равно будете писать 2 запроса. Ну и в чем проблема написать их по очереди, а не в одном операторе?
__________________
- Может, я как-то неправильно живу?!
- Отчего же? Правильно. Только зря...
Старый 03.07.2020, 13:31   #6  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Только нужно учесть, что запрос UNION настолько медленный
Далеко не всегда он медленный. Я не раз разбивал один тяжелый запрос с условием OR на несколько с последующим объединением.
Старый 03.07.2020, 18:41   #7  
Raven Melancholic is offline
Raven Melancholic
Участник
Аватар для Raven Melancholic
Самостоятельные клиенты AX
Лучший по профессии 2015
 
2,158 / 1286 (47) ++++++++
Регистрация: 21.03.2005
Адрес: Москва-Петушки
Коллеги, а какая разница быстрый UNION или не очень если у автора топика:
Цитата:
Axapta 3.0.
Старый 05.07.2020, 21:29   #8  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Цитата:
Сообщение от Alexius Посмотреть сообщение
Далеко не всегда он медленный. Я не раз разбивал один тяжелый запрос с условием OR на несколько с последующим объединением.
Скажем так. Все познается в сравнении. Замена OR на UNION может дать прирост. А можно и вместо UNION сделать 2 INSERT-а. Это еще больше даст прирост, т.к. UNION строит временную таблицу, которая отъедает оперативную память, а INSERT сохраняет все на диск и при многопользовательском использовании запроса лишняя память не расходуется и в "потолок" сервер БД не упирается.
А если INSERT будет делаться во временную таблицу АХ, которая физически после превышения порога 128Кбайт (кажется) становится файлом - то конечно UNION будет быстрее, т.к. он использует все-таки ресурсы сервера БД.

В большинстве случаев, без конкретики вполне можно исходить из того, что UNION медленный вопрос и его всегда можно ускорить.
Но конечно будут случаи, когда UNION будет быстрее. Но тут опять-таки надо исследовать причину. Скорее всего можно будет уйти от UNION с увеличением скорости.

Axapta 3.0 - это неважно - все равно автор предполагает использование Statement и UserConnection. До версии 2009 - UNION в Х++ или через метаданные АОТа нельзя задать.
__________________
Возможно сделать все. Вопрос времени
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Computed column for union values from multiple outer joined data sources in view Blog bot DAX Blogs 0 06.03.2019 21:13
Ошибка запроса типа Union в лукапе Oz DAX: Программирование 1 26.05.2017 15:23
AX UK: Support of the 2010 VAT Package Legislation in the European Union for Microsoft Dynamics AX Blog bot DAX Blogs 0 17.11.2009 17:05
palleagermark: Sample union query from AX 2009 Blog bot DAX Blogs 0 11.07.2008 20:05
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:12.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.