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?

Arulkumar
la source

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)";
cag
la source