Exemple : Joindre des tables dans le mode SQL
Cet exemple illustre comment joindre des données provenant de deux tables de base de données, en utilisant un composant join de MapForce. L'opération join est effectuée dans le mode SQL, comme décrit dans Joins dans le Mode SQL. Veuillez noter que la jointure de trois tables ou plus fonctionne de manière très semblable, voir aussi Exemple : Créer un rapport CSV à partir de plusieurs tables.
L'exemple est accompagné d'un échantillon de mappage disponible dans le chemin suivant : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\JoinDatabaseTables.mfd.
JoinDatabaseTables.mfd
L'objectif du mappage ci-dessus est de combiner des données à partir de deux tables de base de données de source dans un seul fichier CSV cible. Comme illustré dans le diagramme de base de données ci-dessous, la première table (users) stocke les adresses des personnes et la deuxième table (addresses) stocke les noms et les adresses des personnes. Les deux tables sont liées par un champ commun (id dans users correspond à user_id dans addresses). Dans la terminologie de la base de données, ce type de relation est aussi connu comme une "relation de clé étrangère".
Pour plus de commodité, l'image ci-dessous illustre les données actuelles dans les deux tables.
Chaque enregistrement d'utilisateur dans la table users peuvent avoir zéro ou plusieurs adresses dans la table addresses. Par exemple, un utilisateur peut avoir une adresse de type "home", ou deux adresses (une adresse de type "maison" et une autre adresse de type "travail"), ou aucune adresse.
L'objectif du mappage est d'extraire les données complètes (prénom, nom de famille, e-mail, ville, rue, numéro) de tous les utilisateurs ayant au moins une adresse dans la table d'adresses. Il devrait également être possible d'extraire aisément uniquement les adresses d'un certain type (par exemple, uniquement les adresses "maison" ou les adresses "travail"). Le type d'adresses à extraire ("maison" ou "travail") doit être fourni en tant que paramètres du mappage. Les enregistrements extraits des personnes doivent être triés alphabétiquement par le nom de famille.
Les exigences de mappage seront réalisées à l'aide d'un composant Join, comme illustré dans les étapes ci-dessous.
Note : | L'utilisation d'un composant Join n'est pas le seul moyen de joindre des tables ou des affichages de base de données. Les jointures applicables aux bases de données peuvent aussi être effectués en utilisant des instructions SELECT SQL, voir Instructions SELECT SQL en tant que tables virtuelles. Une différence principale entre les instructions SELECT SQL et les composants Join est que les premières sont écrites à la main, ce qui leur confère une plus grande flexibilité. Les composants Join sont une alternative plus simple si vous ne souhaitez pas rédiger des instructions SQL à la main. |
Étape 1: Ajouter la base de données de source
1.Dans le menu Insérer, cliquer sur Base de données. (En alternative, cliquer sur la touche de la barre d'outils Insérer la base de données ).
2.Sélectionner "SQLite" en tant que type de base de données, et cliquer sur Suivant.
3.Chercher le fichier Nanonull.sqlite disponible dans le dossier : <Documents>\Altova\MapForce2024\MapForceExamples\Tutorial\, et cliquer sur Se connecter.
4.Sur invitation, choisir les tables addresses et users.
Étape 2: Ajouter le composant join
1.Dans le menu Insérer, cliquer sur Join. (En alternative, cliquer sur touche de la barre d'outils Join ).
2.Tirer la connexion depuis la table users vers la première entrée du composant join.
3.Agrandir la table users et tirer une connexion depuis la table addresses (enfant de users) vers la deuxième entrée du composant join. La touche vous permet d'ajouter plus de tables si nécessaire ; néanmoins, dans cet exemple, seules deux tables sont jointes.
Note : | Il est également possible d'ajouter la connexion directement depuis la table addresses (celui qui n'est pas enfant d'users) ; néanmoins, dans ce cas, les conditions join devront être définies manuellement, comme décrit dans Ajouter les conditions Join. Dans l'objectif de cet exemple, veuillez vous assurer de créer les connexions comme indiqué ci-dessus. Cela garantit que la condition join requise est créée automatiquement. |
4.Cliquer sur la touche Définir la condition Join disponible sur le composant join. Veuillez noter que la condition join a été créée automatiquement (users.id = addresses.user_id).
Étape 3: Ajouter le composant CSV cible
1.Dans le menu Insérer, cliquer sur Fichier texte. (En alternative, cliquer sur la touche de la barre outilsInsérer fichier de texte ).
2.Lorsque vous êtes invité à choisir un mode de traitement de texte, choisir Utiliser le traitement simple pour le CSV standard... .
3.Cliquer sur Apposer champ plusieurs fois pour créer sept champs CSV. Laisser les autres paramètres tels qu'ils sont.
4.Double-cliquer sur la cellule de titre de chaque champ pour lui donner un nom descriptif (cela rendre votre mappage plus facile à lire).
5.Tirer les connexions de mappage entre le composant Join et le composant CSV comme indiqué ci-dessous. La connexion entre l'item joined du composant join et l'item Rows du composant de cible "créer autant d'enregistrements (lignes) dans la cible étant donné qu'il y a des enregistrements qui satisfont à la condition join".
Étape 4: Ajouter la condition WHERE/ORDER SQL et le paramètre d'entrée
1.Cliquer avec la touche droite dans la connexion entre l'item joined du composant Join et l'item Rows du composant CSV cible, et choisir Insérer WHERE/ORDER SQL.
2.Saisir les clauses WHERE et ORDER BY comme indiqué ci-dessous.
3.Dans le mappage, ajouter un composant d'entrée (en utilisant la commande de menu Insérer | Insérer entrée) et connecter sa sortie au paramètre address_type créé dans l'étape précédente.
4.Double-cliquer sur le composant d'entrée et le configurer comme indiqué ci-dessous. Une valeur de design-time est nécessaire (dans ce cas, "home") pour consulter la sortie de mappage dans MapForce. Si vous souhaitez que l'aperçu extraie les adresses de travail, remplacer cette valeur par "work".
L'explication de mappage
La condition join créée automatiquement dans l'étape 2 garantit que seuls des enregistrements qui satisfont à la condition join users.id = addresses.user_id sont copiés dans la cible. La condition join est ajoutée automatiquement parce que les deux tables sont liées par une relation étrangère clé et les connexions de mappage ont été tirées de manière appropriée. Pour plus d'informations concernant les relations de table, voir Gérer des relations de base de données. Puisque cet exemple a été fait en utilisant les relations de table déjà existantes, vous n'avez pas dû définir de conditions join manuellement . Pour consulter un exemple qui vous montre comment définir des conditions join manuellement, voir Exemple : Créer un rapport CSV depuis plusieurs tables.
Les deux tables de source proviennent de la même base de données et du même composant, ce qui permet de réunir des avantages du mode SQL ( ). Puisque le mode SQL est activé, l'opération join est entreprise par la base de données, et non pas par MapForce. En d'autres termes, une instruction INNER JOIN est générée internement par MapForce et est envoyée à la base de données pour l'exécution. Le type du join (INNER JOIN) est indiqué par l'icône Join intérieur
en face de la table addresses dans le composant Join. Vous pouvez aussi modifier le type join en LEFT OUTER JOIN
, comme décrit dans Changer le Mode Join. Noter, néanmoins que la modification du mode join n'a pas d'effet sur la sortie de cet exemple.
Le composant WHERE/ORDER SQL ajouté dans l'étape 4 permet le filtrage (afin d'extraire soir les adresses home (maison) soit work (travail)) et trier les enregistrements. Veuillez noter que la clause WHERE a créé un paramètre :address_type de type string. Ce paramètre permet de fournir le type d'adresse (home (maison) soit work (travail) depuis le mappage. Pour plus d'information à propos de WHERE/ORDER SQL, voir Filtrer et trier les données de base de données (SQL WHERE/ORDER).
Enfin, le composant d'entrée permet de fournir la valeur de paramètre réelle lorsque le mappage est exécuté. Veuillez noter que, lorsque le mappage est exécuté en-dehors de MapForce (par exemple, lorsqu'il est exécuté par MapForce Server sur un autre appareil), l'entrée doit être fournie au moment de l'exécution du mappage en tant que paramètre de ligne de commande, afin que la valeur design-time mentionnée ci-dessus soit ignorée. Pour plus d'informations, voir Fournir des paramètres au mappage.