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