Faq/Base/141/fr

From The Document Foundation Wiki
< Faq‎ | Base
Jump to: navigation, search

Comment trouver les enregistrements figurant dans une table et absents d'une autre table ?

On a deux tables de structures identiques, ou disposant de champs communs. On souhaite obtenir la liste des enregistrements figurant dans une table mais absents de l'autre.

Le principe sera de relier les tables sur les champs communs via une jointure externe gauche. Ceci signifie qu'on désire tous les enregistrements de la table mentionnée à gauche de l'opérateur de jointure et uniquement les lignes qui correspondent à des lignes de la table de gauche pour la table figurant à droite de l'opérateur. Avec une jointure de ce type lorsqu'il n'y a pas de correspondance dans la table de droite, des valeurs vides (NULL) les remplacent. Nous ajouterons donc un critère de sélection pour ne garder que ces enregistrements.

Les données sont les suivantes :

copie d'écran tables
Les tables à comparer : Table1 et Table2

Nous voulons connaître les enregistrements de Table1 (en haut sur la copie d'écran) absents de Table2. La comparaison ne peut se faire ici sur les identifiants. Nous comparerons les champs Libellé et Montant dans une requête du type :

copie d'écran édition de la requête
Les enregistrements dans Table1 absents de Table2


Ci-dessous le SQL :

SELECT "Table1"."ID", "Table1"."Libellé", "Table1"."Montant" FROM "Table1"
LEFT JOIN "Table2"
ON "Table1"."Libellé" = "Table2"."Libellé" AND "Table1"."Montant" = "Table2"."Montant" 
WHERE "Table2"."Libellé" IS NULL AND "Table2"."Montant" IS NULL


Une "astuce" consiste à passer d'abord par la création d'une requête en mode ébauche pour sélectionner les tables et champs puis de passer en mode SQL pour compléter ce dernier. Cette technique permet d'éviter de taper les noms de champs et tables avec toutes les erreurs que cela suppose...