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 конечно от перемены мест, результат запроса не меняется. Подскажите, пожалуйста, что нужно сделать в аксапте, чтоб учитывались оба условия. Если это возможно. |
|