SQL : Éviter les doublons : INSERT IF NOT EXISTS

On a parfois besoin de vérifier si une entrée dans une table existe avant de faire un INSERT pour éviter les doublons.
La plupart du temps, on fait un SELECT, puis si la requête ne retourne rien, on fait alors un INSERT.
Deux requêtes, donc...

Voici comment faire la même chose en une seule requête avec WHERE NOT EXISTS

Prenons l'exemple d'une table product_alert dans laquelle on enregistrerait l'ID du produit, le lien vers la page sur le site et l'email du client qui souhaite recevoir une alerte dès que le produit sera réapprovisionné.

Voici la requête PDO pour PostgreSQL:

Notes:
La connexion à la DB ($connection) a été initiée en amont.
Les données $_POST sont récupérées après soumission du formulaire

En regardant la requête de plus près :

On fait un INSERT si le SELECT ne retourne rien.
Dans le SELECT, on vérifie que l'email n'est pas enregistré avec le même product_id, auquel cas il n'est pas utile d'enregistrer à nouveau l'alerte.