23.12.2003, 09:56 | #1 |
Участник
|
Выборка записей
Аксапта 3.0
Вопрос может быть простой, но ... Есть таблицы А(Поле а_Id ), Б(Поле a_Id), С(Поле a_Id) Можно ли в одном запросе вернуть все записи таблицы А, записи которой по а_Id есть и в Б и в С ? Т.е. A.a_Id == Б.a_Id && A.a_Id == C.a_Id |
|
23.12.2003, 11:06 | #2 |
NavAx
|
можно
|
|
23.12.2003, 11:17 | #3 |
Administrator
|
PHP код:
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
23.12.2003, 11:22 | #4 |
Участник
|
Подскажите, пожалуйста,
как к нижеприведенному добавить правильно таблицу С Query query = new Query(); QueryBuildDataSource qbd = query.addDataSource(tablenum(A)); qbd.addDataSource(tablenum(Б)); qbds.joinMode(JoinMode::InnerJoin); qbds.addLink(fieldNum(А, а_Id), fieldNum(Б, а_Id)); |
|
23.12.2003, 11:23 | #5 |
Участник
|
Поправка
qbds.joinMode(JoinMode::ExistsJoin); |
|
23.12.2003, 11:30 | #6 |
Administrator
|
PHP код:
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
23.12.2003, 11:36 | #7 |
Участник
|
Спасибо, а в случае , если
a_Id - уникальный идентификатор в таблице А, какая то часть этих записей есть в Б, какая-то в С. Т.е. не всегда Б.а_id = C.a_Id ? |
|
23.12.2003, 11:40 | #8 |
Administrator
|
Тогда добавляйте С как childDataSource не к Б, а к А
Собственно тут смысл какой. Если С - childDataSource для Б, получается выборка строк А с A_Id, содержащимися в Б И в С. Если С - childDataSource для А - выборка строк А с А_Id, содержащимися в Б ИЛИ в С.
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
23.12.2003, 12:06 | #9 |
Участник
|
Простите, но все равно не много не пойму
У меня и С , и Б - childDataSource для А . Вопрос , как откатиться к А (не к child), чтобы сделать связь с С ? На реалиях : Выбрать записи в InventDim (A), записи которых есть в PurchLine (Б) или SalesLine (С) |
|
23.12.2003, 12:56 | #10 |
Участник
|
Что бы не быть голословной :
QueryRun exportQueryRun; Query query = new Query(); QueryBuildDataSource qbDSb, qbDSc, qbd = query.addDataSource(tablenum(InventDim)); InventDim inv; qbDSb = qbd.addDataSource(tablenum(PurchLine)); qbDSb.addLink(fieldNum(InventDim, InventDimId), fieldNum(PurchLine, InventDimId)); qbDSb.joinMode(JoinMode::InnerJoin); qbDSb.fetchMode(1); qbDSc = qbd.addDataSource(tablenum(SalesLine)); qbDSc.addLink(fieldNum(InventDim, InventDimId), fieldNum(SalesLine, InventDimId)); qbDSc.joinMode(JoinMode::InnerJoin); qbDSc.fetchMode(1); exportQueryRun = new QueryRun(query); while (exportQueryRun.next()) { inv = exportQueryRun.get(tableNum(InventDim)); print inv.inventDimId; } Посмотрите, что получиться |
|
23.12.2003, 13:36 | #11 |
----------------
|
да, погорячился, извините
Вы хотите сказать, что вернулись не все записи?
Цитата:
Можно ли в одном запросе вернуть все записи таблицы А, записи которой по а_Id есть и в Б и в С ?
Ошибка fetchMode(0); Кстати, Вы уверены, что вам нужны именно аналитики строк заказов\закупок, а не проводок? |
|
23.12.2003, 14:26 | #12 |
Administrator
|
fetchMode(0), ИМХО, проблему не решит. Кстати, для какого DataSource поставить fetchMode(0)?
По-моему, дело в том, что в случае двух и более вложенных DataSource Axapta забивает на установленный JoinMode и выполняет OuterJoin. Swetik, вам могу посоветовать только дополнительную проверку после get: PHP код:
__________________
Not registered yet? Register here! Have comments, questions, suggestions or anything else regarding our web site? Don't hesitate, send them to me |
|
23.12.2003, 14:32 | #13 |
Участник
|
Спасибо всем,
после долгих мытарств, действительно всплыла таблица InventTrans , по которой немного проще (при связи с InventDim) , добыть InventDim по Закупкам и Заказам... |
|
|
|