使用查询 class 将多个 table 加入同一个 table
join multiple tables to the same table using query class
我正在使用查询 class 构建一个查询,该查询将有两个或三个 table 连接到相同的 table,如下所示:
qbds1 = query.addDataSource(tablenum(Table1));
qbds2 = qbds1.addDataSource(tablenum(Table2));
qbds2.relations(true);
qbds3 = qbds2.addDataSource(tablenum(Table3));
qbds3.relations(true);
qbds4 = qbds3.addDataSource(tablenum(Table4));
qbds4.relations(true);
qbds5 = qbds3.addDataSource(tablenum(Table5));
qbds5.relations(true);
qbds6 = qbds5.addDataSource(tablenum(Table6));
qbds6.relations(true);
qbds6.joinMode(JoinMode::ExistsJoin);
在这个例子中,我试图加入 Table4 到 Table3 和 Table5 到 Table3 但它并不像我想要的那样工作;我已经检查了调试器,直到:
qbds5 = qbds3.addDataSource(tablenum(Table5))
一切正常;一旦执行此行,Table4 和 Table3 之间的连接就会消失,并且不会添加 Table5 和 Table3 之间的连接。发送到 SQL 服务器的查询实际上是 2 个查询,一个在 table1、table2 和 table3 之间,另一个在 table5 和 table6(link 到 table4 不存在)。如果我在最后执行 info (query.xml()),我会看到所有 table 之间的连接,就像我想要的那样。
是否可以使用查询 class 实现此目的?
如果您在一个join Level上有多个数据源,您需要将数据源的FetchMode
设置为1:1(默认为1:n)。
在你的例子中,查询树看起来像
Table1
+ Table2
+ Table3
+ Table4
+ Table5
+ Table6
所以 Table4
和 Table5
处于同一连接级别,需要 1:1 的 FetchMode
。要为数据源设置 FetchMode
,请使用类似于
的代码行
qbds2.fetchMode(QueryFetchMode::One2One);
有关其他信息,请参阅 Magical FetchMode property and See how the fetch and join modes in Microsoft Dynamics AX queries work。
FH-Inway 答案正确:只需添加
qbdsX.fetchMode(QueryFetchMode::One2One);
对于同一级别的每个连接。
我正在使用查询 class 构建一个查询,该查询将有两个或三个 table 连接到相同的 table,如下所示:
qbds1 = query.addDataSource(tablenum(Table1));
qbds2 = qbds1.addDataSource(tablenum(Table2));
qbds2.relations(true);
qbds3 = qbds2.addDataSource(tablenum(Table3));
qbds3.relations(true);
qbds4 = qbds3.addDataSource(tablenum(Table4));
qbds4.relations(true);
qbds5 = qbds3.addDataSource(tablenum(Table5));
qbds5.relations(true);
qbds6 = qbds5.addDataSource(tablenum(Table6));
qbds6.relations(true);
qbds6.joinMode(JoinMode::ExistsJoin);
在这个例子中,我试图加入 Table4 到 Table3 和 Table5 到 Table3 但它并不像我想要的那样工作;我已经检查了调试器,直到:
qbds5 = qbds3.addDataSource(tablenum(Table5))
一切正常;一旦执行此行,Table4 和 Table3 之间的连接就会消失,并且不会添加 Table5 和 Table3 之间的连接。发送到 SQL 服务器的查询实际上是 2 个查询,一个在 table1、table2 和 table3 之间,另一个在 table5 和 table6(link 到 table4 不存在)。如果我在最后执行 info (query.xml()),我会看到所有 table 之间的连接,就像我想要的那样。
是否可以使用查询 class 实现此目的?
如果您在一个join Level上有多个数据源,您需要将数据源的FetchMode
设置为1:1(默认为1:n)。
在你的例子中,查询树看起来像
Table1
+ Table2
+ Table3
+ Table4
+ Table5
+ Table6
所以 Table4
和 Table5
处于同一连接级别,需要 1:1 的 FetchMode
。要为数据源设置 FetchMode
,请使用类似于
qbds2.fetchMode(QueryFetchMode::One2One);
有关其他信息,请参阅 Magical FetchMode property and See how the fetch and join modes in Microsoft Dynamics AX queries work。
FH-Inway 答案正确:只需添加
qbdsX.fetchMode(QueryFetchMode::One2One);
对于同一级别的每个连接。