Faq/Base/141/fr
TDF LibreOffice Document Liberation Project Blogs communautaires Weblate Nextcloud Redmine Ask LibreOffice Donner
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 :
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 :
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...