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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 02.04.2008, 17:59   #1  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
:( Непонятка с exist join-ом...
Добрый день!
Есть запрос:
SELECT ItemId, DatePhysical, TransType, TransRefId, StatusReceipt, StatusIssue, Qty, CostAmountPhysical, CostAmountPosted, CostAmountAdjustment FROM InventTrans WHERE ((ItemId = 0234530500)) AND ((DateFinancial>=14.01.08 AND DateFinancial<=16.01.08)) AND ((TransRefId = 139233))
JOIN configId, InventLocationId, InventGtdId_RU, inventBatchId FROM InventDim WHERE InventTrans.inventDimId = InventDim.inventDimId AND ((InventLocationId = 261_ГП11)) JOIN ItemId FROM InventTable WHERE InventTrans.ItemId = InventTable.ItemId
EXISTS JOIN * FROM InventJournalTable WHERE InventTrans.TransRefId = InventJournalTable.JournalId

проблема в следующем: без "EXISTS JOIN" он работает нормально, а ним не очень (вернее совсем не работает). Запись в InventJournalTable для JournalId = 139233 точно существует!!!
Может кто-то попробовать мне объяснить, что я упускаю? Огромное спасибо
Старый 02.04.2008, 18:06   #2  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 245 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
Поясните что значит "вообще не работает". Просто чтоб не было недопонимания.
Вы ж понимаете, что в переменной InventJournalTable в любом случае не будет данных?

Или же всё-таки весь запрос вообще перестает выдавать данные?
(тогда навскидку могу предположить проблемы с выравниваением (или размером выравнивания) данных в это записи в поле InventJournalTable.JournalId)
__________________
Zhirenkov Vitaly
Старый 02.04.2008, 18:16   #3  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
"вообще не работает".
мда, это я немножко преувеличил .
Цитата:
Или же всё-таки весь запрос вообще перестает выдавать данные?
да, перестает
Цитата:
(или размером выравнивания) данных в это записи в поле InventJournalTable.JournalId
а по детальнее можна?
Старый 02.04.2008, 18:31   #4  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
мда, забыл сказать приложение AX3SP3CU1, SQL2000 SP3.
Старый 02.04.2008, 18:36   #5  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 245 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Ну это скорее экстроординарный случай, но и такое бывает.

Что я имел ввиду:
Например поменяли размерность типа для поля InventJournalTable.JournalId с Х на Y. А т.к. у него стоит правое выравнивание, то слева все старые данные добиты пробелами до Х, а новые до Y. И ищется в этом селекте размером Y. И если ваша строка "старая" и "добита" до Х, то она не найдётся селектом.
Ну и такие же проблемы могут возникнуть не только из-за изменения размера, а и из-за "внешнего вмешательства", тип например если извне строки неправильно вставляли и т.п....

Как-то вот так...

Проверьте непосредственно в БД, что ваша строка лежит с правильными данными и выравниванием...
__________________
Zhirenkov Vitaly
Старый 02.04.2008, 18:43   #6  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 245 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
ну точнее я описал скорее общую проблему...

а в вашем случае надо убедиться что обе записи (InventTrans и InventJournalTable) в соответсвующих полях (transRefId и JournalId) имеют действительно строго одинаковые значения (с точностью до пробелов спереди).

И ещё конечно же, надо чтоб они лежали в одной компании. ))
__________________
Zhirenkov Vitaly
Старый 02.04.2008, 19:11   #7  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
И ещё конечно же, надо чтоб они лежали в одной компании. ))
Тоже вариант
Старый 02.04.2008, 22:13   #8  
kashperuk is offline
kashperuk
Senior SDE, Dynamics AX
Аватар для kashperuk
MCBMSS
Соотечественники
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,353 / 2066 (77) +++++++++
Регистрация: 30.05.2004
Адрес: Копенгаген, Дания
Попробуйте переписать запрос след. образом

select * from inventTrans
exists join * from InventJournalTable
join * from InventTable
join * from InventDim
Старый 02.04.2008, 23:40   #9  
gl00mie is offline
gl00mie
Участник
MCBMSS
Most Valuable Professional
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,601 / 5289 (184) ++++++++++
Регистрация: 28.11.2005
Адрес: Москва
Записей в блоге: 2
Цитата:
Сообщение от Didukh84 Посмотреть сообщение
SELECT ... FROM InventTrans ... EXISTS JOIN * FROM InventJournalTable WHERE InventTrans.TransRefId = InventJournalTable.JournalId
проблема в следующем: без "EXISTS JOIN" он работает нормально, а ним не очень (вернее совсем не работает).
Был аналогичный косяк, правда, на Oracle с его NSL_LOWER(), SUBSTR() и прочими функциями. В частности, при работе с Oracle из строковых полей вырезаются подстроки длины EDT. Так вот, пытался я join'ить по InventTrans.TransRefId = InventJournalTable.JournalId, и тоже ничего не работало; дело оказалось в том, что у EDT JournalId и InventTransRefId разная длина, в результате на СУБД уходил запрос вида
PHP код:
WHERE SUBSTR(NLS_LOWER(A.TransRefId),1,20)=SUBSTR(NLS_LOWER(B.JournalId),1,10
Разумеется, такое условие никогда не выполняется, так что запрос пришлось переделывать. С другой стороны, на Ms SQL вроде такие "изыски" не используются, но в любом случае, включите трассировку и посмотрите, какой именно запрос уходит на СУБД.
Старый 03.04.2008, 08:56   #10  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
С другой стороны, на Ms SQL вроде такие "изыски" не используются, но в любом случае, включите трассировку и посмотрите, какой именно запрос уходит на СУБД.
Честно сказать - не знаю . По идее, если выравнивание в EDT стоит выравнивание влево - то нет, а вот если вправо...
Старый 03.04.2008, 11:29   #11  
raz is offline
raz
NavAx
Аватар для raz
NavAx Club
Лучший по профессии 2014
Лучший по профессии 2009
 
1,429 / 950 (34) +++++++
Регистрация: 22.07.2003
Адрес: МО
Дело в вырвнивании
Помогите разобраться с QueryBuildDataSource

Делайте запрос с использованием InventJournalTrans
Старый 03.04.2008, 12:38   #12  
ZVV is offline
ZVV
MCITP
MCP
Oracle
MCBMSS
 
1,006 / 245 (11) ++++++
Регистрация: 13.02.2004
Адрес: Минск
->
Да, согласен, моя вышеизложенная теория к данному случаю отношения не имеет (но по жизни встречается ).
Дело просто в разном размере полей, выровненных вправо.

Цитата:
С другой стороны, на Ms SQL вроде такие "изыски" не используются,
изыски то не используются, но суть остаётся та же, так что этот запрос там тоже не будет работать.

нужно переписывать запрос (см. предыдущий пост raz)
__________________
Zhirenkov Vitaly
Старый 03.04.2008, 13:33   #13  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
kashperuk:

X++:
 select * from inventTrans 
  exists join * from InventJournalTable
  join * from InventTable
  join * from InventDim
 		 	 		  		  		 		 			 				__________________
отрабатывает аналогично
Старый 03.04.2008, 13:34   #14  
Didukh84 is offline
Didukh84
Участник
 
57 / 10 (1) +
Регистрация: 09.06.2006
Цитата:
Делайте запрос с использованием InventJournalTrans
Наверное так и сделаю. Спасибо
Теги
join, select

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблемы с Exists Join Logger DAX: Программирование 28 28.04.2010 02:54
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
2 join-а + CasheLookup = EntireTable vallys DAX: Программирование 1 10.03.2006 13:20
2 и более OUTER JOIN к одному паренту Ronin DAX: Программирование 21 19.12.2005 13:42
Опции темы Поиск в этой теме
Поиск в этой теме:

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

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

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

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