05.10.2007, 16:43 | #1 |
Участник
|
Помогите составить запрос
Всем привет!
Подскажите, пожалуйста, возможно ли в аксапте реализовать следующий запрос. Есть 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); } Если поменять местами 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); } В SQL конечно от перемены мест, результат запроса не меняется. Подскажите, пожалуйста, что нужно сделать в аксапте, чтоб учитывались оба условия. Если это возможно. |
|
05.10.2007, 17:29 | #2 |
Участник
|
В Аксе такой запрос реализовать по-моему невозможно. Для решения задачи Вам скорее всего необходимо реализовать это дело через подзапросы.
|
|
05.10.2007, 17:53 | #3 |
Участник
|
можно надо только
X++: // qbds3 = qbds.addDataSource(tablenum(Table_3)); qbds3 = qbds2_3.addDataSource(tablenum(Table_3)); // qbds3.addLink(fieldNum(Table_1,tab3),fieldNum(Table_3,tab3)); qbds3.addRange(fieldNum(Table_3, RecID)).Value('(table_1.tab3==table_3.tab3)'); |
|
|
За это сообщение автора поблагодарили: Borzaja (0). |
05.10.2007, 17:57 | #4 |
Участник
|
Цитата:
Сообщение от belugin
можно надо только
X++: // qbds3 = qbds.addDataSource(tablenum(Table_3)); qbds3 = qbds2_3.addDataSource(tablenum(Table_3)); // qbds3.addLink(fieldNum(Table_1,tab3),fieldNum(Table_3,tab3)); qbds3.addRange(fieldNum(Table_3, RecID)).Value('(table_1.tab3==table_3.tab3)'); Последний раз редактировалось sparur; 05.10.2007 в 21:02. |
|
05.10.2007, 18:20 | #5 |
SAP
|
да по мойму тоже можно, а вот и ссылочка которая в свое время мне и пригодилась http://www.axaptapedia.com/Expressions_in_query_ranges
|
|
05.10.2007, 18:22 | #6 |
SAP
|
да и по моему в первый раз мне ее подогнал именно belugin
|
|