Показать сообщение отдельно
Старый 29.05.2013, 12:54   #1  
Wamr is offline
Wamr
----------------
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
 
1,737 / 858 (32) +++++++
Регистрация: 15.01.2002
Адрес: Москва
Записей в блоге: 7
AX2009. Не используйте NotExists
Ошибка известная с давних времен.
Если в запросе использовать notexists join, то последующие exists & notexists не работают.
Небольшой пример на AX2009RU8:
X++:
static void JobNotExists(Args _args)
{
    InventTable     inventTable;
    InventTable     inventTableE;
    InventTable     inventTableNE;
    
    ItemId          itemId = '1001', itemIdne = '1001notFound';
    ;
    
    // Убедимся, что такая запись есть
    select itemId from inventTable
        where inventTable.ItemId == itemId;
        
    info(inventTable.ItemId);

    // Убедимся, что такая ItemId есть, а ItemIdne нет
    select itemId from inventTable
        where inventTable.ItemId == itemId
    notexists join inventTableNE
        where inventTableNE.ItemId == itemIdne;

    info(inventTable.ItemId);

    // Здесь exists возвращает false, но на результате это не сказывается
    select itemId from inventTable
        where inventTable.ItemId == itemId
    notexists join inventTableNE
        where inventTableNE.ItemId == itemIdne
    exists join inventTableE
        where inventTableE.ItemId == itemIdne;

    error(inventTable.ItemId);

    // Здесь второй notexists возвращает false, но на результате это не сказывается
    select itemId from inventTable
        where inventTable.ItemId == itemId
    notexists join inventTableE
        where inventTableE.ItemId == itemIdne
    notexists join inventTableNE
        where inventTableNE.ItemId == inventTable.ItemId;

    error(inventTable.ItemId);
}
Почему вспомнил?
Встретил в HRP несколько примеров такого кода с макросом TransLinkNotExistsReversed_RU

P.S. Сейчас не могу проверить, но помнится на Oracle это не воспроизводится

Последний раз редактировалось Wamr; 29.05.2013 в 12:58.
За это сообщение автора поблагодарили: lev (5), MikeR (3), A_BAS (2).