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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 18.09.2007, 17:18   #1  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Red face запрос с 4 таблицами. Загадка с Join
Доброго времени суток..
есть у меня запрос подобный следущему
X++:
while select VendTrans
where
     VendTrans.TransDate <= toDate &&
     VendTrans.TransDate >= fromDate
notexists join PaymentRequestLine
where 
    PaymentRequestLine.Voucher == VendTrans.Voucher
join PaymentRequest
where 
    PaymentRequestLine.Code == PaymentRequest.Code &&
    PaymentRequest.Status == "некий статус"
к нему необходимо добавить фильтр по отделу 0033, который показан тут
X++:
while select VendTrans
where
     VendTrans.TransDate <= toDate &&
     VendTrans.TransDate >= fromDate
join RContractTable
where
    RContractTable.RContractCode == VendTrans.RContractCode &&
    RContractTable.CurOtdel == "0033"
есть подозрения, что тут все в одном запросе не реализовать..Что посоветуют знатоки? Может я зря надеюсь на вариант БЕЗ 2х запросов и временной таблицы между ними?
Старый 18.09.2007, 17:30   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а так не получается?
X++:
while select VendTrans
where
     VendTrans.TransDate <= toDate &&
     VendTrans.TransDate >= fromDate
join RContractTable
where
    RContractTable.RContractCode == VendTrans.RContractCode &&
    RContractTable.CurOtdel == "0033"
notexists join PaymentRequestLine
where 
    PaymentRequestLine.Voucher == VendTrans.Voucher
join PaymentRequest
where 
    PaymentRequestLine.Code == PaymentRequest.Code &&
    PaymentRequest.Status == "некий статус"
За это сообщение автора поблагодарили: Андрей К. (1).
Старый 18.09.2007, 17:31   #3  
glibs is offline
glibs
Member
Сотрудники компании It Box
Most Valuable Professional
Лучший по профессии 2011
Лучший по профессии 2009
 
4,942 / 911 (40) +++++++
Регистрация: 10.06.2002
Адрес: I am from Kyiv, Ukraine. Now I am in Moscow. For private contacts: glibs@hotmail.com
Попробуйте для начала notexists join опустить вниз.
__________________
С уважением,
glibs®
Старый 18.09.2007, 17:48   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Если первый кусок кода работает, то при опущении нотэкзиста он может начать работать по другому (последний иннерджоин вылезет из скобок
Старый 18.09.2007, 19:20   #5  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Belugin, совершенно верно..В первом запросе иннер джойн относится к нотекзист джойну. Остается опробовать ваш вариант.
Старый 19.09.2007, 08:17   #6  
Андрей К. is offline
Андрей К.
Постигающий
 
152 / 10 (1) +
Регистрация: 09.04.2007
Цитата:
Сообщение от belugin Посмотреть сообщение
а так не получается?
X++:
while select VendTrans
where
     VendTrans.TransDate <= toDate &&
     VendTrans.TransDate >= fromDate
join RContractTable
where
    RContractTable.RContractCode == VendTrans.RContractCode &&
    RContractTable.CurOtdel == "0033"
notexists join PaymentRequestLine
where 
    PaymentRequestLine.Voucher == VendTrans.Voucher
join PaymentRequest
where 
    PaymentRequestLine.Code == PaymentRequest.Code &&
    PaymentRequest.Status == "некий статус"
получилось таки! но цель не оправдала временных затрат на запрос
Старый 19.09.2007, 16:59   #7  
Alexis is offline
Alexis
Участник
 
30 / 11 (1) +
Регистрация: 08.12.2003
Адрес: РБ, Минск
Запрос составлен, а дальше открываем план исполнения и вперед на оптимизацию плана!
__________________
Дайте мне точку опоры, и я переверну земной шар (Архимед)
Старый 19.09.2007, 17:12   #8  
Sada is offline
Sada
Программатор
Аватар для Sada
 
1,450 / 153 (8) ++++++
Регистрация: 29.03.2005
Адрес: Толи Барнаул, толи Москва
Можно явно указать какие поля Вы хотите выбрать из таблиц. Это увеличит производительность. Попробовать с индекс хинтами.

Последний раз редактировалось Sada; 19.09.2007 в 17:23.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Не отрабатывает запрос EXISTS JOIN Paul_ST DAX: База знаний и проекты 8 21.03.2008 17:21
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
2 join-а + CasheLookup = EntireTable vallys DAX: Программирование 1 10.03.2006 13:20
можно ли сделать с помощью join следующий запрос: SergAY DAX: Программирование 1 29.07.2003 11:39
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 10:33.