> Tech > Les jointures INNER et LEFT

Les jointures INNER et LEFT

Tech - Par iTPro - Publié le 27 janvier 2012
email

Avant de passer à l'exemple, il faut savoir une dernière chose. En CAML, il est possible d'effectuer des jointures de type INNER ou de type LEFT. La différence entre ces deux types de jointures est très importante. Nous verrons cela lors de l'explication de notre exemple. Revenez donc dans

votre classe et ajoutez la directive suivante :

using Microsoft.SharePoint;

Déclarez ensuite la fonction suivante :

private void AfficherMonumentEtVille(string type)
{

}

Le but de cette fonction sera d'afficher tous les monuments ainsi que les informations sur leur ville et leur pays. Le paramètre type va permettre de définir si la jointure sera de type LEFT ou INNER et nous permettra de comprendre la différence. La première chose à faire dans cette fonction est de récupérer une référence à la liste et de créer un objet SPQuery pour réaliser la requête :

SPList list = SPContext.Current.Web.Lists["Monuments"];

SPQuery query = new SPQuery();

Nous allons nous baser sur la liste Monuments car ce sont les informations des monuments et les informations liées à ce monument que nous voulons récupérer. Nous allons maintenant définir la propriété Joins de la requête. C'est dans cette propriété que nous allons définir le format de la jointure. Nous allons directement afficher le code du Joins et nous l'expliquerons après :

Voir Code 3 ci-dessous.

Comme nous venons de le dire, la propriété Joins va permettre de contenir du code CAML indiquant comment la ou les jointures seront effectuées. Ici, pour commencer, nous n'allons effectuer qu'une seule jointure. En gros, nous allons joindre la table Monuments à la tableVilles grâce au champ Ville de la table monument. Ainsi, nous récupérerons les informations de chaque monument ainsi que les informations sur la ville dans laquelle se trouvent ces monuments.

Une jointure est donc introduite grâce à l'élément Join. Cet élément attend deux paramètres. Le premier se nomme Type et permet de définir le type de la jointure. La valeur de cet attribut peut soit être LEFT soit INNER. Nous verrons plus tard ce que cela représente. L'attribut ListAlias quant à lui va permettre de donner une "autre nom" à la table que nous joignons. Ici, la première table est bien entendu la table sur laquelle la requête sera exécutée, à savoir Monuments. Nous allons ensuite joindre la table Villes et nous lui donneront comme alias VillesList.

Nous devons ensuite tester l'égalité. Pour cela, nous utiliserons donc l'élément Eq pour introduire la comparaison. Cet élément doit alors contenir deux éléments FieldRef qui serviront chacun à quelque chose de bien précis. Le premier FieldRef va permettre d'indiquer quel champ dans la première liste (Monuments) contiendra la référence à la deuxième liste (Villes). Ce champ doit obligatoirement être unLookup. Ici, nous indiquons donc que le nom du champ est Ville (étant le nom du Lookup de la liste Monuments). Nous ajoutons ensuiteRefType='Id' pour indiquer que la comparaison sera faite sur l'id que ce champ contient. Effectivement, un champ de type Lookup contient une référence vers l'élément cible sous forme de "ID;#Valeur". RefType='Id' permet donc de faire la comparaison avec l'ID.

Le deuxième élément FieldRef va nous permettre d'indiquer le champ dans la deuxième liste auquel sera comparée la valeur du Lookup. Étant donné que nous extrayons l'ID du champ Lookup, nous ferons bien sur référence au champ ID de la liste Villes. Nous faisons donc passer l'alias de la liste Villes comme valeur de l'attribut List qui permet de spécifier à quelle liste appartient le champ auquel on fait référence. Nous indiquons enfin que nous récupérons le champ ID de cette liste pour effectuer la comparaison.

Et c'est tout, la jointure est effectuée. Mais il reste une question à se poser… A aucun moment nous avons défini que c'est avec la liste nommées Villes que nous ferons la jointure. Nous avons bien donné un alias à la deuxième liste (à savoir VillesList), mais à aucun moment nous n'avons indiqué clairement que la jointure sera effectuée avec la liste Villes. En fait, cela est dit implicitement. Effectivement, quand nous spécifions que la comparaison sera effectuée grâce au Lookup field Ville, la requête va directement "regarder" vers quelle liste ce champ pointe. Il va "voir" que c'est vers la liste Villes et c'est donc avec cette liste que la jointure sera effectuée.
 


 

Téléchargez gratuitement cette ressource

Protection des Données : 10 Best Practices

Protection des Données : 10 Best Practices

Le TOP 10 des meilleures pratiques, processus et solutions de sécurité pour mettre en œuvre une protection efficace des données et limiter au maximum les répercutions d’une violation de données.

Tech - Par iTPro - Publié le 27 janvier 2012