top of page

MERGE

La commande MERGE en SQL permet d’effectuer plusieurs requêtes simultanément, par exemple pour vérifier une condition avant de mettre à jour une table.


Voici la syntaxe courante :


MERGE INTO table1

USING table2

ON conditions_de_correspondance_entre_table1_et_table2

WHEN MATCHED THEN

Instructions_sur_table1

WHEN NOT MATCHED THEN

Instructions_sur_table1


Exemple d’utilisation :


Imaginons une base de données ‘gest_fact’, qu’une entreprise a créée pour stocker les données relatives aux factures qu’elle a émises : la liste des produits commercialisés par l’entreprise, la liste des factures émises par l’entreprise et le détail de chaque ligne de facture. ‘Gest_fact’ est constituée de trois tables : ‘produit’, ‘facture’ et ‘ligne_facture’. Imaginons qu’on dispose d’une table ‘ligne_facture_import’, qui répertorie les nouvelles factures récupérées à l’aide de l’import d’un fichier excel. On souhaite écrire une seule requête MERGE, qui vérifie l’existence des factures de ‘ligne_facture_import’ dans ‘ligne_facture’ et qui, si elles existent, met à jour leurs informations et, si elles n’existent pas, les crée. Voici le code correspondant :


MERGE INTO ligne_facture

USING ligne_facture_import AS source

ON ligne_facture.id_lf = source.id_lf

WHEN MATCHED THEN UPDATE SET nom_produit=source.nom_produit, num_facture=source.num_facture, quantite=source.quantite, num_lf=source.num_lf, statut=source.statut

WHEN NOT MATCHED BY TARGET THEN INSERT (nom_produit, num_facture, quantite, num_lf, statut) VALUES (source.nom_produit, source.num_facture, source.quantite, source.num_lf, source.statut);


Voici la table ligne_facture avant l’exécution de la requête :


Puis la table ligne_facture_import :


Et enfin la table ligne_facture après l’exécution de la requête :


_


Nos formations sur https://www.apprendresql.com/ 


Voir autres : ALTER TABLE, CREATE TABLE, DROP TABLE, AND, AS, AUTO_INCREMENT, AVG(), BETWEEN, COUNT(), CROSS JOIN, DELETE, DISTINCT, FOREIGN KEY, FULL JOIN, GROUP BY, HAVING, IN, INNER JOIN, INSERT, INTERSECT, IS NULL, LEFT JOIN, LIKE, MAX(), MERGE, MIN(), NATURAL JOIN, OR, ORDER BY, PRIMARY KEY, RIGHT JOIN, SELECT, SUM(), UNION, UPDATE, WITH ROLLUP, GRANT, REVOKE, BEGIN TRANSACTION, COMMIT, ROLLBACK, SAVEPOINT


bottom of page