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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.10.2007, 16:43   #1  
m_ax is offline
m_ax
Участник
 
4 / 10 (1) +
Регистрация: 18.06.2007
Помогите составить запрос
Всем привет!
Подскажите, пожалуйста, возможно ли в аксапте реализовать следующий запрос.

Есть 3 таблички: Table_1, Table_2 и Table_3. Хочу получить:
X++:
select * from Table_1
 where exists (select * from Table_2 
                     where  Table_1.tab1 = Table_2.tab1 and
                                exists (select * from Table_3 
                                           where Table_2.tab2 = Table_3.tab2 and
                                                    Table_3.name like '% SecondName%'))
 and
 exists (select * from Table_3 
            where  Table_1.tab3 = Table_3.tab3 and
                      Table_3.name like '% FirstName%')
Пишу следующее:
X++:
q = new Query();
qbds = q.addDataSource(tableNum(Table_1));
 
qbds2 = qbds.addDataSource(tablenum(Table_2));
qbds2.addLink(fieldNum(Table_1,tab1),fieldNum(Table_2,tab1));
qbds2.joinMode(JoinMode::ExistsJoin);
qbds2.fetchMode(0);
qbds2_3 = qbds2.addDataSource(tablenum(Table_3));
qbds2_3.addLink(fieldNum(Table_2,tab2),fieldNum(Table_3,tab2));
qbds2_3.joinMode(JoinMode::ExistsJoin);
qbds2_3.fetchMode(0);
qbds2_3.addRange(fieldnum(Table_3, Name)).value('*SecondName*');
 
qbds3 = qbds.addDataSource(tablenum(Table_3));
qbds3.addLink(fieldNum(Table_1,tab3),fieldNum(Table_3,tab3));
qbds3.joinMode(JoinMode::ExistsJoin);
qbds3.fetchMode(0);
qbds3.addRange(fieldnum(Table_3, Name)).value('*FirstName*');
queryRun = new queryRun(q);
while (queryRun.next())
{
    table = queryRun.get(tableNum(Table_1));
    info(table.tab1);
}
Range по SecondName учитывается, а по FirstName, НЕ учитывается.
Если поменять местами exest – ы
X++:
q = new Query();
qbds = q.addDataSource(tableNum(Table_1));
 
qbds3 = qbds.addDataSource(tablenum(Table_3));
qbds3.addLink(fieldNum(Table_1,tab3),fieldNum(Table_3,tab3));
qbds3.joinMode(JoinMode::ExistsJoin);
qbds3.fetchMode(0);
qbds3.addRange(fieldnum(Table_3, Name)).value('*FirstName*');
 
qbds2 = qbds.addDataSource(tablenum(Table_2));
qbds2.addLink(fieldNum(Table_1,tab1),fieldNum(Table_2,tab1));
qbds2.joinMode(JoinMode::ExistsJoin);
qbds2.fetchMode(0);
qbds2_3 = qbds2.addDataSource(tablenum(Table_3));
qbds2_3.addLink(fieldNum(Table_2,tab2),fieldNum(Table_3,tab2));
qbds2_3.joinMode(JoinMode::ExistsJoin);
qbds2_3.fetchMode(0);
qbds2_3.addRange(fieldnum(Table_3, Name)).value('*SecondName*');
 
queryRun = new queryRun(q);
while (queryRun.next())
{
    table = queryRun.get(tableNum(Table_1));
    info(table.tab1);
}
Получается обратная ситуация, Range по SecondName НЕ учитывается, а по FirstName, учитывается.
В SQL конечно от перемены мест, результат запроса не меняется. Подскажите, пожалуйста, что нужно сделать в аксапте, чтоб учитывались оба условия. Если это возможно.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
передача параметров в запрос while select tolstjak DAX: Программирование 13 15.02.2009 19:39
Нужно срочно дописать запрос помогите CRASH_505 DAX: Программирование 3 09.09.2008 10:49
Почему join запрос разбивается на подзапросы!? 3oppo DAX: Программирование 59 28.06.2007 11:52
Долго отрабатывает запрос по таблице InventItemLocation AlexeyBP DAX: Администрирование 1 30.05.2007 17:33
Помогите написать запрос Кандидат DAX: Программирование 7 17.10.2005 14:44

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

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

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