ArcObjects avec jointure gauche


8

J'attends un code ArcObjects équivalent à la jointure gauche SQL.

Par exemple: J'ai le code SQL ci-dessous, c'est une simple jointure pour récupérer les enregistrements des deux tables en fonction de la ChecklistIdvaleur.

SELECT  T1.ChecklistId, T1.ChecklistName, 
        T2.Latitude, T2.Longitude
FROM [dbo].[TableOne] T1 
INNER JOIN [dbo].[TableTwo] T2 ON T2.ChecklistId = T1.ChecklistId
WHERE T1.ChecklistId = @ChecklistId

J'ai converti la requête SQL ci-dessus en ArcObjects.

IQueryDef queryDef = featureWorkspace.CreateQueryDef();

queryDef.Tables = "TableOne, TableTwo";
queryDef.SubFields = "TableOne.ChecklistId, TableOne.ChecklistName, TableTwo.Latitude, TableTwo.Longitude";
queryDef.WhereClause = "TableOne.ChecklistId = '" + checklistId + "' AND TableOne.ChecklistId = TableTwo.ChecklistId";

ICursor cursor = queryDef.Evaluate();
IRow row = null;

while ((row  = cursor.NextRow()) != null)
{
    // ... get and set the values to the objects
}

Je veux récupérer les enregistrements même la T1.ChecklistOwnercolonne ayant des nullvaleurs. En termes simples, nous pouvons dire comme SQL LEFT JOINcomme suit:

SELECT  T1.ChecklistId, T1.ChecklistName, 
        T2.Latitude, T2.Longitude,
        T3.FullName
FROM [dbo].[TableOne] T1 
INNER JOIN [dbo].[TableTwo] T2 ON T2.ChecklistId = T1.ChecklistId
LEFT JOIN [dbo].[TableThree] T3 ON T3.UserAlias = T1.ChecklistOwner
WHERE T1.ChecklistId = @ChecklistId

Comment puis-je convertir la requête SQL ci-dessus en ArcObjects?

Réponses:


1

Vous pouvez effectuer une jointure gauche en utilisant la propriété "Tables".

IQueryDef queryDef = ((IFeatureWorkspace)hoja.Workspace).CreateQueryDef();
queryDef.Tables = "User LEFT JOIN Country ON User.ID = Country.ID";
queryDef.SubFields = "User.ID, User.Name, Country.Name";

Fonctionne bien avec les jointures gauche, droite et intérieure, mais aucune idée de la façon de créer une jointure complète.

Vous pouvez également utiliser plusieurs jointures en les regroupant entre parenthèses.

queryDef.Tables = "((User INNER JOIN Country ON User.ID = Country.ID) LEFT JOIN C ON User.ID = C.ID)";
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.