Ajouter une jointure (Gestion des données)

Synthèse

Joint une couche à une autre couche ou table selon un champ commun. Les couches d’entités, les vues tabulaires et les couches raster avec une table attributaire raster sont prises en charge.

Les enregistrements du paramètre Join Table (Table de jointure) seront appariés aux enregistrements du paramètre Input Table (Table en entrée). Un appariement est effectué lorsque les valeurs du champ en entrée et du champ de jointure sont égales. Cette jointure est temporaire.

Illustration

Illustration de l’outil Ajouter une jointure

Utilisation

  • La valeur du paramètre Table en entrée peut être une couche d’entités, une vue tabulaire ou une couche raster avec une table attributaire. Si un chemin de données est utilisé, la couche est créée avec la jointure. La jointure se trouve toujours dans la couche, pas avec les données.

  • Pour établir une jointure permanente, utilisez l’outil Joindre un champ ou utilisez la couche jointe en entrée de l’un des outils suivants : Copier des entités, Copier des enregistrements, Exporter des entités ou Exporter la table. Lorsque vous enregistrez les résultats dans une nouvelle table ou classe d’entités, vous pouvez utiliser l’environnement Gérer les noms de champ complets pour vérifier si les noms de champ joints en sortie sont qualifiés avec le nom de la table d’origine du champ. Les alias de champ sont conservés depuis la couche vers la sortie, sauf si la sortie est un shapefile.

  • Utilisez les outils Make Query Layer (Créer une couche de requête), Create Database View (Créer une vue de base de données) ou Make Aggregation Query Layer (Créer une couche de requête d’agrégation) pour optimiser les performances d’une jointure et bénéficier de fonctionnalités supplémentaires lorsque vous souhaitez joindre une géodatabase d’entreprise ou une base de données SQLite.

  • Si l’entrée est un chemin d’accès à une classe d’entités ou à un jeu de données, cet outil crée et renvoie une nouvelle couche avec les résultats de l’outil.

  • Lorsqu’une jointure un vers plusieurs est générée, le résultat de la jointure peut être visualisé dans la table attributaire, où un message d’avertissement indique si la table contient des ID d’objet dupliqués. Étant donné que de nombreux outils de géotraitement ne prennent pas en charge les données contenant des ID d’objet dupliqués et que le traitement de telles données est susceptible de générer des résultats inattendus, il est recommandé de d’abord copier la couche jointe dans une nouvelle classe d’entités à l’aide de l’outil Exporter des entités. Utilisez ensuite cette nouvelle classe d’entités comme entrée d’autres outils de géotraitement.

    Vous pouvez également définir le paramètre Opération de jointure sur Joindre un vers premier pour éviter tout ID d’objet dupliqué.

  • Le paramètre Opération de jointure propose trois états d’ajustement de la cardinalité. Il est vide par défaut et autorise la source de données à tenter une jointure un vers plusieurs. L’option Joindre un vers plusieurs fonctionne uniquement pour des sources de données spécifiques qui possèdent un champ ID d’objet. L’option Joindre un vers premier utilise le premier appariement dans la table, ce qui peut générer des sorties différentes si le champ ID d’objet est modifié ou si l’espace de travail dans lequel la table est copiée change. Les jointures un vers premier ne sont pas sensibles à la casse, contrairement aux jointures un vers plusieurs.

  • Les tables suivantes comprennent des sorties potentielles de l’exécution d’une jointure avec différentes entrées.

    La première table illustre une jointure de type un vers plusieurs. La conservation d’enregistrements d’appariement uniquement n’a aucun effet, car tous les enregistrements ont des appariements.

    Table en entréeTable de jointureRésultat

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    1

    300

    1

    A

    1

    300

    2

    400

    2

    B

    2

    400

    Exemple d’utilisation de l’outil Ajouter une jointure : jointure de type un vers plusieurs lorsque chaque table comporte un champ d’ID d’objet

    La deuxième table utilise une table de jointure sans champ Object ID (ID d’objet) ; seule une jointure de type un vers premier est possible. Une jointure de type un vers premier est également possible uniquement si chaque table provient d’un espace de travail différent. Une jointure de type un vers premier n’est pas une correspondance sensible à la casse.

    Table en entréeTable de jointureRésultat

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

    Exemple d’utilisation de l’outil Ajouter une jointure : jointure de type un vers premier lorsque l’une des tables ne comporte pas de champ d’ID d’objet

    Dans la dernière table, le nombre d’enregistrements dans la table en entrée est supérieur à celui de la table de jointure. Si vous conservez tous les enregistrements, tous les enregistrements correspondants sont également conservés, plus les enregistrements de la table en entrée qui ne correspondaient pas.

    Table en entréeTable de jointureRésultat

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <Nul>

    <Nul>

    4

    D

    <Nul>

    <Nul>

    Exemple d’utilisation de l’outil Ajouter une jointure : jointure de type un vers plusieurs lorsque chaque table comporte un champ Object ID (ID d’objet) et que le paramètre Keep all input records (Conserver tous les enregistrements en entrée) est activé

    La table en entrée doit comporter un champ d’ID d’objet pour réaliser une jointure de type un vers plusieurs et doit figurer dans le même espace de travail.

  • Les enregistrements de la table de jointure peuvent être appariés à plusieurs enregistrements si la table de jointure comporte un champ d’ID d’objet. Sinon, une jointure de type un vers premier est réalisée.

  • Par défaut, tous les enregistrements sont conservés lors de la jointure de tables. Si un enregistrement de la table en entrée n’a pas d’équivalent dans la table de jointure, il se voit attribuer des valeurs nulles pour tous les champs ajoutés à la table en entrée à partir de la table de jointure.

    Table en entréeTable de jointureRésultat

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    C

    1

    300

    1

    A

    1

    300

    4

    D

    2

    400

    2

    B

    2

    400

    3

    C

    <Nul>

    <Nul>

    4

    D

    <Nul>

    <Nul>

    Lorsque le paramètre Conserver tous les enregistrements en entrée est désactivé, si un enregistrement de la table en entrée n’a pas d’équivalent dans la table de jointure, il est supprimé de la sortie obtenue. Si la table en entrée est la table attributaire d’une couche, les entités auxquelles aucune donnée n’est jointe ne s’affichent pas sur la carte.

    Table en entréeTable de jointureRésultat

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    Champ en entrée

    Type

    Champ de jointure

    Valeur

    1

    A

    1

    100

    1

    A

    1

    100

    2

    B

    2

    200

    2

    B

    2

    200

    3

    300

    4

    400

  • Si une couche de type un vers plusieurs est utilisée, l’outil Calculer un champ mettra à jour le premier enregistrement rencontré et ignorera les enregistrements en double restants. Si des valeurs de champ de couche joint sont mises à jour manuellement dans la vue tabulaire, c’est la dernière modification effectuée est conservée.

  • Les propriétés de champ telles que les alias, la visibilité et la mise en forme des nombres sont conservées lors de l'ajout ou de la suppression d'une jointure.

  • La jointure est conservée uniquement pour la durée de la couche. Pour conserver une couche, enregistrez la session ArcGIS AllSource ou enregistrez-la dans un fichier de couche à l’aide de l’outil Enregistrer une couche dans un fichier.

    Pour que vous puissiez afficher les résultats d’une jointure créée dans un outil de script, l’outil doit inclure la couche comme paramètre en sortie obtenu. De manière similaire, le paramètre Couche ou vue tabulaire en entrée mise à jour doit être défini comme paramètre en sortie obtenu dans un outil de modèle pour que vous puissiez afficher les résultats de la jointure.

  • Dans la table obtenue, les champs sont préfixés avec le nom de l’entrée et un point (.). Tous les champs de la table de jointure sont préfixés avec le nom de la table de jointure et un point comme valeur par défaut.

    Par exemple, joindre landuse, qui comporte les champs A et B, à lookup_tab, qui comporte les champs C et D, donne une couche ou une vue tabulaire avec les champs suivants : landuse.A, landuse.B, lookup_tab.C et lookup_tab.D.

  • Une couche doit comporter des noms de champ uniques. Si les tables en entrée et les tables jointes portent le même nom et se trouvent dans des espaces de travail différents, une jointure ne peut pas être réalisée sans créer une couche mal définie.

  • L’indexation du champ en entrée et du champ de jointure peut améliorer les performances. Si le paramètre Index joined fields (Champs de jointure des index) est activé, un index attributaire est ajouté aux deux champs de jointure. Vous pouvez également indexer chaque champ de jointure à l’aide de l’outil Ajouter un index attributaire.

  • Si les résultats de la jointure sont imprévus ou incomplets, vérifiez si le champ en entrée et le champ de jointure sont indexés. S’ils ne le sont pas, essayez d’ajouter un index. S’ils le sont, essayez de supprimer l’index, puis de l’ajouter à nouveau pour corriger le problème. Vous pouvez aussi cochez le paramètre Rebuild join field indexes (Recréer les index de champ de jointure) pour retirer les index existants et les créer à nouveau.

  • Si les champs de la couche ou de la vue tabulaire en entrée ont été modifiés (renommés ou masqués) à l’aide du paramètre Informations de champ dans l’outil Créer une couche d’entités ou Générer une vue tabulaire, ces modifications de champ ne sont pas incluses dans la couche ou la vue tabulaire jointe en sortie.

  • L’ensemble de définition de la table de jointure est appliqué à la couche ou la vue tabulaire en entrée par l’ajout d’une nouvelle requête active. La requête précédente est conservée et définie sur inactive de sorte à pouvoir être désactivée de la table jointe si nécessaire. Pour supprimer l’ensemble de définition, utilisez l’outil Supprimer une jointure.

  • Si la table de jointure a un ensemble de définition, le paramètre Keep all input records (Conserver tous les enregistrements en entrée) n’a aucun effet. La mise à jour manuelle de l’ensemble de définition par l’ajout de or OBJECTID is null peut régler ce problème le cas échéant.

  • L’outil Valider une jointure peut être utilisé pour valider une jointure entre deux couches ou tables afin de déterminer si celles-ci ont des noms de champ et des champs d’ID d’objet valides, si la jointure produit des enregistrements correspondants, s’il s’agit d’une jointure un vers un ou un vers plusieurs, ou d’autres propriétés de la jointure.

    Pour faciliter l’utilisation de l’outil, la boîte de dialogue associée contient un bouton permettant de valider la jointure.

  • Les sélections opérées sur les tables jointes ou en entrée sont ignorées dans l’outil Ajouter un jointure. L’outil Joindre un champ prend en charge les sélections. Pour effectuer la jointure uniquement avec un sous-ensemble sélectionné, créez une couche de sélection et utilisez-la en entrée de l’outil Ajouter une jointure. Les propriétés de la couche de jointure sont copiées lorsque vous créez une couche de sélection.

Paramètres

ÉtiquetteExplicationType de données
Table en entrée

Couche ou vue tabulaire à laquelle la table de jointure est jointe.

Mosaic Layer; Raster Layer; Table View
Champ en entrée

Champ de la couche ou de la vue tabulaire en entrée sur lequel la jointure est basée.

Field
Table de jointure

Table ou vue tabulaire qui va être jointe à la couche ou à la vue tabulaire en entrée.

Mosaic Layer; Raster Layer; Table View
Joindre un champ

Champ dans la table de jointure qui contient les valeurs sur lesquelles sera basée la jointure.

Field
Conserver tous les enregistrements en entrée
(Facultatif)

Spécifie si seuls les enregistrements de l’entrée qui correspondent à un enregistrement de la table de jointure sont inclus dans la sortie.

  • Activé : tous les enregistrements de la couche ou de la vue tabulaire en entrée sont inclus dans la sortie. On parle également de jointure externe. Il s’agit de l’option par défaut.
  • Désactivé : seuls les enregistrements en entrée qui correspondent à une ligne de la table de jointure sont inclus dans la sortie. On parle également de jointure interne.
Boolean
Champs de jointure des index
(Facultatif)

Spécifie si les index attributaires de la table seront ajoutés au champ en entrée et au champ de jointure.

  • Activé : les deux champs seront indexés. Si la table possède un index existant, aucun nouvel index n’est ajouté.
  • Désactivé : aucun index n’est ajouté. Il s’agit de l’option par défaut.
Boolean
Recréer les index des champs joints
(Facultatif)

Spécifie si les index du champ en entrée et du champ de jointure seront supprimés et créés à nouveau.

  • Activé : les index existants seront supprimés et un nouvel index sera ajouté.
  • Désactivé : les index existants ne seront pas supprimés, ni recréés. Il s’agit de l’option par défaut.
Boolean
Opération de jointure
(Facultatif)

Indique si la jointure sera une jointure un vers plusieurs ou un vers premier lorsque les données présentent une cardinalité un vers plusieurs.

Si aucune valeur de paramètre n’est spécifiée, l’opération de jointure est basée sur la source de données.

  • Joindre un vers premierL’opération de jointure utilisera le premier appariement.
  • Joindre un à plusieursL’opération de jointure effectuera plusieurs appariements sensibles à la casse.
String

Sortie obtenue

ÉtiquetteExplicationType de données
Couche ou vue tabulaire en entrée mise à jour

Jeu de données en entrée mis à jour.

Table View; Raster Layer; Mosaic Layer

arcpy.management.AddJoin(in_layer_or_view, in_field, join_table, join_field, {join_type}, {index_join_fields}, {rebuild_index}, {join_operation})
NomExplicationType de données
in_layer_or_view

Couche ou vue tabulaire à laquelle la table de jointure est jointe.

Mosaic Layer; Raster Layer; Table View
in_field

Champ de la couche ou de la vue tabulaire en entrée sur lequel la jointure est basée.

Field
join_table

Table ou vue tabulaire qui va être jointe à la couche ou à la vue tabulaire en entrée.

Mosaic Layer; Raster Layer; Table View
join_field

Champ dans la table de jointure qui contient les valeurs sur lesquelles sera basée la jointure.

Field
join_type
(Facultatif)

Spécifie si seuls les enregistrements de l’entrée qui correspondent à un enregistrement de la table de jointure sont inclus dans la sortie.

  • KEEP_ALLTous les enregistrements de la couche ou de la vue tabulaire en entrée sont inclus dans la sortie. On parle également de jointure externe. Il s’agit de l’option par défaut.
  • KEEP_COMMONSeuls les enregistrements en entrée qui correspondent à une ligne de la table de jointure sont inclus dans la sortie. On parle également de jointure interne.
Boolean
index_join_fields
(Facultatif)

Spécifie si les index attributaires de la table seront ajoutés au champ en entrée et au champ de jointure.

  • INDEX_JOIN_FIELDSLes deux champs seront indexés. Si la table possède un index existant, aucun nouvel index n’est ajouté.
  • NO_INDEX_JOIN_FIELDSAucun index n’est ajouté. Il s’agit de l’option par défaut.
Boolean
rebuild_index
(Facultatif)

Spécifie si les index du champ en entrée et du champ de jointure seront supprimés et créés à nouveau.

  • REBUILD_INDEXLes index existants seront supprimés et un nouvel index sera ajouté.
  • NO_REBUILD_INDEXLes index existants ne seront pas supprimés, ni recréés. Il s’agit de l’option par défaut.
Boolean
join_operation
(Facultatif)

Indique si la jointure sera une jointure un vers plusieurs ou un vers premier lorsque les données présentent une cardinalité un vers plusieurs.

Si aucune valeur de paramètre n’est spécifiée, l’opération de jointure est basée sur la source de données.

  • JOIN_ONE_TO_FIRSTL’opération de jointure utilisera le premier appariement.
  • JOIN_ONE_TO_MANYL’opération de jointure effectuera plusieurs appariements sensibles à la casse.
String

Sortie obtenue

NomExplicationType de données
out_layer_or_view

Jeu de données en entrée mis à jour.

Table View; Raster Layer; Mosaic Layer

Exemple de code

Exemple 1 d’utilisation de la fonction AddJoin (fenêtre Python)

Le script ci-dessous pour la fenêtre Python montre comment utiliser la fonction AddJoin en mode immédiat.

import arcpy
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
veg_joined_table = arcpy.management.AddJoin("vegetation", "HOLLAND95", 
                                            "vegtable", "HOLLAND95")
arcpy.management.CopyFeatures(veg_joined_table, "vegjoin")
Exemple 2 d’utilisation de la fonction AddJoin (script autonome)

Ce script autonome illustre l’utilisation de la fonction AddJoin dans le cadre d’un processus visant à joindre une table à une classe d’entités et à extraire des entités spécifiques.

# Name: AttributeSelection.py
# Purpose: Join a table to a feature class and select the desired attributes

# Import system modules
import arcpy

# Set environment settings
arcpy.env.workspace = "C:/data/Habitat_Analysis.gdb"
# The qualifiedFieldNames environment is used by Copy Features when persisting 
# the join field names.
arcpy.env.qualifiedFieldNames = False

# Set local variables
inFeatures = "vegtype"
joinTable = "vegtable"
joinField = "HOLLAND95"
expression = "vegtable.HABITAT = 1"
outFeature = "vegjoin"

# Join the feature layer to a table
veg_joined_table = arcpy.management.AddJoin(inFeatures, joinField, joinTable, 
                                            joinField)

# Select desired features from veg_layer
arcpy.management.SelectLayerByAttribute(veg_joined_table, "NEW_SELECTION", 
                                        expression)

# Copy the layer to a new permanent feature class
result = arcpy.management.CopyFeatures(veg_joined_table, outFeature)

# See field names and aliases
resultFields = arcpy.ListFields(result)
print([field.name for field in resultFields])
print([field.aliasName for field in resultFields])

Rubriques connexes