IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

INSERT INTO et WHERE NOT EXISTS


Sujet :

Requêtes MySQL

  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    automobile
    Inscrit en
    Juillet 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : automobile
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2023
    Messages : 2
    Par défaut INSERT INTO et WHERE NOT EXISTS
    Bonjour, je travail sur un projet ou je suis amené a ajouter des données dans la basse de donnée

    or j'aimerais que si les données envoyées sont déjà présente quelle ne le soit pas.

    actuellement j'envois les donnée avec cette requête


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql = "INSERT INTO $LettreX (TITRE, DEFINITION) VALUES ('$Titre', '$Definition')";
    tout ce passe bien mais j'ai des doublons

    j'ai fait un essai avec cette requête


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO LEXIQUE_A( TITRE, DEFINITION ) 
    VALUE('test', 'test')
    WHERE NOT EXSITS(
    SELECT TITRE
    FROM LEXIQUE_A
    WHERE TITRE = 'test')
    Mais j'ai évidement une erreur

    Bon dimanche a tous

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    721
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 721
    Par défaut
    [QUOTE=Nathann83;11958499]

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO LEXIQUE_A( TITRE, DEFINITION ) 
    VALUE('test', 'test')
    WHERE NOT EXSITS(
    SELECT TITRE
    FROM LEXIQUE_A
    WHERE TITRE = 'test')
    Citation Envoyé par Nathann83 Voir le message
    Mais j'ai évidement une erreur
    Il faut la poster alors, et bien la lire aussi car le message d'erreur doit être explicite: il y a un typo: EXSITS
    D'autre part, vous ne faites pas un select from dans cet exemple, vous insérez des valeurs statiques 'test' dont le nombre de sera proportionnel au nombre d'enregistrements retournés par le select (pour faire simple).

    Et il faut savoir ce que vous entendez par "doublon": est-ce que ça concerne une des deux colonnes, ou la totalité ? Là vous ne regardez que le titre (enfin, quand votre requête sera corrigée), mais vous ne prenez pas en compte la colonne DEFINITION pour l'instant.

  3. #3
    Nouveau candidat au Club
    Homme Profil pro
    automobile
    Inscrit en
    Juillet 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : automobile
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2023
    Messages : 2
    Par défaut
    merci pour ta réponse, alors le message d'erreur est le suivant

    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE NOT EXSITS( SELECT TITRE FROM LEXIQUE_A WHERE TITRE = 'test')' at line 3

    et dans le principe ce que je veux faire c'est :

    envoyer dans la base de donnée un "Titre" et une "Définition" mais que si le "Titre" est déjà dans la db il ne l'envoi pas, la définition peux être différente c'est pour ça que je souhaite contrôler que le "Titre" dans la requête.

  4. #4
    Expert confirmé
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 310
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 310
    Billets dans le blog
    17
    Par défaut
    C'est EXISTS et non EXSISTS, et la syntaxe que tu utilises est invalide.
    Syntaxe du INSERT => https://dev.mysql.com/doc/refman/8.0/en/insert.html

    envoyer dans la base de donnée un "Titre" et une "Définition" mais que si le "Titre" est déjà dans la db il ne l'envoi pas, la définition peux être différente c'est pour ça que je souhaite contrôler que le "Titre" dans la requête.
    Il faut que tu définisses une contrainte d'unicité sur la colonne "Titre". Ainsi il ne pourra pas y avoir 2 lignes ayant une même valeur dans la colonne "Titre".
    Voir l'index UNIQUE.
    Tu peux ajouter un tel index avec ALTER TABLE ou CREATE INDEX => https://dev.mysql.com/doc/refman/8.0...ate-index.html

    Ceci dit, si ta source de données contient un identifiant il serait plus sage de l'utiliser.

Discussions similaires

  1. Insert into table if not exists
    Par cisco.nat dans le forum Langage SQL
    Réponses: 1
    Dernier message: 21/06/2013, 13h07
  2. [MySQL-5.5] comment faire un insert en bloc where not exists
    Par Motti2 dans le forum Requêtes
    Réponses: 0
    Dernier message: 26/05/2013, 13h42
  3. REQUETE INSERT WHERE NOT EXISTS
    Par tidou95220 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 27/03/2012, 13h35
  4. Requete INSERT INTO avec IF NOT EXISTS: Est-ce possible ?
    Par yann123456 dans le forum Requêtes
    Réponses: 14
    Dernier message: 15/06/2009, 15h37
  5. Insert .. where not exists
    Par Zolex dans le forum SQL Procédural
    Réponses: 11
    Dernier message: 02/03/2007, 11h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo