join mehrere Tabellen auf der gleichen Tabelle mithilfe von query-Klasse
Bin ich mit der Abfrage-Klasse zu erstellen Sie eine Abfrage, die zwei oder drei Tabellen join auf die gleiche Tabelle wie diese:
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);
In diesem Beispiel, das ich versuche zu join-Tabelle4 Tabelle3 und Tabelle5 Tabelle3 aber Es funktioniert nicht wie ich will; ich habe mit dem debugger und bis:
qbds5 = qbds3.addDataSource(tablenum(Table5))
alles ist ok, sobald es führt diese Linie ist die Verbindung zwischen Table4 und Tabelle3 verschwindet und die Verbindung zwischen Table5 und Tabelle3 wird NICHT Hinzugefügt. Die gesendete Abfrage an den SQL-server ist eigentlich 2 Abfragen, eine zwischen Tabelle1, Tabelle2 und Tabelle3 und ein weiteres zwischen table5 und table6 (der link zu table4 nicht vorhanden). Wenn ich ausführen info (query.xml()) am Ende, ich sehe die verbindungen zwischen allen Tabellen, wie ich wollte.
Ist es sogar möglich, mithilfe von query-Klasse?
.relations(false)
und erstellen Sie manuell die Beziehungen mit addLink(...)
InformationsquelleAutor Alex | 2015-04-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie mehr als eine Datenquelle, die auf einer Verknüpfung der Ebene, die Sie brauchen, um die
FetchMode
von den Datenquellen zum 1:1 ein (Standardeinstellung ist 1:n).In Ihrem Fall die Abfrage Baum sieht aus wie
So
Table4
undTable5
sind auf dem gleichen join-Ebene und brauchen eineFetchMode
1:1. Um dieFetchMode
für eine Datenquelle verwenden, die eine code-Zeile, die ähnlichSehen Magische FetchMode Eigenschaft und Sehen Sie, wie die fetch-und join-Modi in Microsoft Dynamics AX Abfragen arbeiten für weitere Informationen.
Ich war gerade auf der Suche bei dem letzten link zu sehen, bevor Sie Ihre Antwort, und ich erkannte, dass ich hinzufügen, fetchMode(QueryFetchMode::One2One) table4 und table5 join (so habe ich es vor dem posting, aber ich denke, ich habe es nicht für table4 UND table5). Vielen, vielen Dank!
InformationsquelleAutor FH-Inway
FH-Inway Antwort ist richtig: fügen Sie einfach
für alle gemeinsam auf dem gleichen Niveau.
InformationsquelleAutor Alex