02.04.2008, 17:59 | #1 |
Участник
|
Непонятка с 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 |
MCITP
|
Поясните что значит "вообще не работает". Просто чтоб не было недопонимания.
Вы ж понимаете, что в переменной InventJournalTable в любом случае не будет данных? Или же всё-таки весь запрос вообще перестает выдавать данные? (тогда навскидку могу предположить проблемы с выравниваением (или размером выравнивания) данных в это записи в поле InventJournalTable.JournalId)
__________________
Zhirenkov Vitaly |
|
02.04.2008, 18:16 | #3 |
Участник
|
Цитата:
"вообще не работает".
Цитата:
Или же всё-таки весь запрос вообще перестает выдавать данные?
Цитата:
(или размером выравнивания) данных в это записи в поле InventJournalTable.JournalId
|
|
02.04.2008, 18:31 | #4 |
Участник
|
мда, забыл сказать приложение AX3SP3CU1, SQL2000 SP3.
|
|
02.04.2008, 18:36 | #5 |
MCITP
|
Ну это скорее экстроординарный случай, но и такое бывает.
Что я имел ввиду: Например поменяли размерность типа для поля InventJournalTable.JournalId с Х на Y. А т.к. у него стоит правое выравнивание, то слева все старые данные добиты пробелами до Х, а новые до Y. И ищется в этом селекте размером Y. И если ваша строка "старая" и "добита" до Х, то она не найдётся селектом. Ну и такие же проблемы могут возникнуть не только из-за изменения размера, а и из-за "внешнего вмешательства", тип например если извне строки неправильно вставляли и т.п.... Как-то вот так... Проверьте непосредственно в БД, что ваша строка лежит с правильными данными и выравниванием...
__________________
Zhirenkov Vitaly |
|
02.04.2008, 18:43 | #6 |
MCITP
|
ну точнее я описал скорее общую проблему...
а в вашем случае надо убедиться что обе записи (InventTrans и InventJournalTable) в соответсвующих полях (transRefId и JournalId) имеют действительно строго одинаковые значения (с точностью до пробелов спереди). И ещё конечно же, надо чтоб они лежали в одной компании. ))
__________________
Zhirenkov Vitaly |
|
02.04.2008, 19:11 | #7 |
Участник
|
Цитата:
И ещё конечно же, надо чтоб они лежали в одной компании. ))
|
|
02.04.2008, 22:13 | #8 |
Участник
|
Попробуйте переписать запрос след. образом
select * from inventTrans exists join * from InventJournalTable join * from InventTable join * from InventDim |
|
02.04.2008, 23:40 | #9 |
Участник
|
Цитата:
PHP код:
|
|
03.04.2008, 08:56 | #10 |
Участник
|
Цитата:
С другой стороны, на Ms SQL вроде такие "изыски" не используются, но в любом случае, включите трассировку и посмотрите, какой именно запрос уходит на СУБД.
|
|
03.04.2008, 11:29 | #11 |
NavAx
|
Дело в вырвнивании
Помогите разобраться с QueryBuildDataSource Делайте запрос с использованием InventJournalTrans |
|
03.04.2008, 12:38 | #12 |
MCITP
|
Да, согласен, моя вышеизложенная теория к данному случаю отношения не имеет (но по жизни встречается ).
Дело просто в разном размере полей, выровненных вправо. Цитата:
С другой стороны, на Ms SQL вроде такие "изыски" не используются,
нужно переписывать запрос (см. предыдущий пост raz)
__________________
Zhirenkov Vitaly |
|
03.04.2008, 13:33 | #13 |
Участник
|
kashperuk:
X++: select * from inventTrans exists join * from InventJournalTable join * from InventTable join * from InventDim __________________ |
|
03.04.2008, 13:34 | #14 |
Участник
|
Цитата:
Делайте запрос с использованием InventJournalTrans
|
|