|
|
|
|
#1 |
|
aka awas
|
Доброго времени суток, вам, господа и дамы!
Не подскажите, как построить селект с 2мя и более outer join'ами с одним парентом? Или объяснить мне в чем я не прав. У меня на последнем Join'e ругается что "Невозможно выбрать запись в 'Условия оплаты' ('PaymTerm') Использован оператор объединения таблиц join, но выражение WHERE не содержит связи между таблицами." static void Job10(Args _args) { SalesTable contractTable; EmplTable emplTable; PaymTerm paymTerm; ; while select SalesName from contractTable outer join NumOfDays, Description from paymTerm where paymTerm.PaymTermId == contractTable.Payment outer join Name from emplTable where emplTable.EmplId == contractTable.SalesResponsible { info(strfmt("%1 %2", paymTerm.NumOfDays, contractTable.SalesName)); } } Хинт: с "обыкновенными", inner join'ами, все job запускается... |
|
|
|
|
#2 |
|
Участник
|
Попробуйте так
X++: qbDS2.relations(false); qbDS2.addRange(fieldNum(InventDim, InventDimId)). value(strfmt("(((%2.dataAreaId == %3.DataAreaId) || (%2.dataAreaId != %3.DataAreaId)) && " + "(%1.inventDimId == %3.inventDimId))", qbDS1.name(), q.dataSourceTable(tableNum(InventTable)).name(), qbDS2.name()));
__________________
Axapta v.3.0 sp5 kr2 |
|
|
|
|
#3 |
|
Участник
|
Цитата:
Сообщение от AndyD
Попробуйте так
X++: qbDS2.relations(false); qbDS2.addRange(fieldNum(InventDim, InventDimId)). value(strfmt("(((%2.dataAreaId == %3.DataAreaId) || (%2.dataAreaId != %3.DataAreaId)) && " + "(%1.inventDimId == %3.inventDimId))", qbDS1.name(), q.dataSourceTable(tableNum(InventTable)).name(), qbDS2.name())); тоже самое, но наивно решил не заморачиваться с strfmt() в тесте своем и вбивал сразу же условие текстомX++: qbDS2.addRange(fieldNum(InventDim, InventDimId)). value("(((InventTable.dataAreaId == InventDim.DataAreaId) || (InventTable.dataAreaId != InventDim.DataAreaId)) && (InventSum.inventDimId == InventDim.inventDimId))"); Не ошибайтесь так люди
|
|
|
|
|
#4 |
|
Участник
|
Можно было явно дать название датасоурсам
qbDS1 = q.addDataSource(tableNum(InventSum), "InventSum"); или qbDS1.Name("InventSum"); и т.д. Тогда бы ваш вариант работал.
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 19.12.2005 в 09:08. |
|
|
|
|
#5 |
|
----------------
|
Хочу отметить, что Job40 (см. тут ) замечательно работает на Oracle и никак не работает на MS SQL.
|
|
|
|
|
#6 |
|
Developer
|
Цитата:
Сообщение от Wamr
Хочу отметить, что Job40 (см. тут ) замечательно работает на Oracle и никак не работает на MS SQL.
Код: qbDS2.addRange(fieldnum(InventDim, DataAreaId)).value(strfmt(
"((%1.DataAreaId == %2.DataAreaId) || (%1.DataAreaId != %2.DataAreaId))",
qbDS2.name(),
q.dataSourceTable(tablenum(InventTable)).name()
)); |
|
|
|
|
#7 |
|
----------------
|
а включаешь
PHP код:
Наверно, это из-за SaveDataPerCompany = NO Последний раз редактировалось Wamr; 19.12.2005 в 13:36. |
|
|
|
|
#8 |
|
Developer
|
Вот это у меня работает (Ax 3.0 SP 2, MS SQL Server 2000):
Код: static void Job40(Args _args)
{
Query q = new Query();
QueryRun qr;
QueryBuildDataSource qbDS1, qbDS2;
InventSum inventSum;
InventTable inventTable;
InventDim inventDim;
;
qbDS1 = q.addDataSource(tableNum(InventSum));
qbDS2 = qbDS1.addDataSource(tableNum(InventTable));
qbDS2.joinMode(JoinMode::OuterJoin);
qbDS2.fetchMode(QueryFetchMode::One2One);
qbDS2.relations(true);
qbDS2 = qbDS1.addDataSource(tableNum(InventDim));
qbDS2.joinMode(JoinMode::OuterJoin);
qbDS2.fetchMode(QueryFetchMode::One2One);
qbDS2.relations(true);
qbDS2.addRange(fieldnum(InventDim, DataAreaId)).value(strfmt(
"((%1.DataAreaId == %2.DataAreaId) || (%1.DataAreaId != %2.DataAreaId))",
qbDS2.name(),
q.dataSourceTable(tablenum(InventTable)).name()
));
info(qbDS1.toString());
qr = new QueryRun(q);
qr.next();
inventSum = qr.get(tablenum(InventSum));
inventTable = qr.get(tablenum(InventTable));
inventDim = qr.get(tablenum(InventDim));
info(strfmt("%1 %2 %3", inventSum.ItemId, inventTable.ItemName, inventDim.inventDimId));
} |
|
|
|
|
#9 |
|
Developer
|
Sorry - не увидел "SaveDataPerCompany = NO"
![]() Конечно из-за этого, я ж range на DataAreaId цеплял... ааа... "SaveDataPerCompany = NO" появилось уже после прочтения сообщения мной... тогда понятно, почему не увидел...
Последний раз редактировалось vallys; 19.12.2005 в 14:32. |
|
|
|
|
Похожие темы
|
||||
| Тема | Ответов | |||
| Двойной Outer Join в Query | 2 | |||
| Несколько outer join в запросе | 2 | |||
| Данные в Grid из таблиц, связанных по Outer Join | 2 | |||
| Outer Join | 3 | |||
| outer join для трех таблиц | 4 | |||
|