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

Langage SQL Discussion :

Inserer si nouveau et mettre à jour si l'enregistrement existe


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    148
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2006
    Messages : 148
    Points : 49
    Points
    49
    Par défaut Inserer si nouveau et mettre à jour si l'enregistrement existe
    * Bonjour, *

    je cherche comment mettre à jour une ligne et si cette dernière n’existe pas je l'ajoute !

    1,a1,b1,c1,d1

    2,a2,b2,c2,d2

    3,a3,b3,c3,d3

    4,a4,b4,c4,d4

    5,a5,b5,c4,d5

    si dans cet enregistrement les valeurs b(x),et c(x) existent déjà alors il suffit juste de modifier la valeur d; Si non ajouter l'enregistrement.

    exemple pour l'enregistrement suivant : a80,b2,c2,d874 il faut une mis à jour de la valeur d2 par d874 .

    merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 262
    Points : 12 936
    Points
    12 936
    Par défaut
    Bonjour,
    Je dira qu'il faut faire
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    INSERT INTO(...) VALUES(..) UPDATE DUPLICATES

    Si je ne m'abuse, la recherche d'un "duplicat" se base uniquement sur la clé primaire de la table (c'est le cas sur MaxDB).

    Tatayo.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingenieur de recherche - Ecologue
    Inscrit en
    Juin 2003
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingenieur de recherche - Ecologue

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 157
    Points : 1 414
    Points
    1 414
    Par défaut
    bonjour


    quel moteur ?

    sous FIREBIRD, c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Update or insert into (....)
    values (....)
    Matching (....)

  4. #4
    Membre expert Avatar de iberserk
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Novembre 2004
    Messages
    1 795
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 795
    Points : 3 173
    Points
    3 173
    Par défaut
    je cherche comment mettre à jour une ligne et si cette dernière n’existe pas je l'ajoute !

    1,a1,b1,c1,d1

    2,a2,b2,c2,d2

    3,a3,b3,c3,d3

    4,a4,b4,c4,d4

    5,a5,b5,c4,d5

    si dans cet enregistrement les valeurs b(x),et c(x) existent déjà alors il suffit juste de modifier la valeur d; Si non ajouter l'enregistrement.

    exemple pour l'enregistrement suivant : a80,b2,c2,d874 il faut une mis à jour de la valeur d2 par d874 .

    merci


    Quel est votre SGBD? tous n'implémente pas une syntaxe pour celà...
    En SQL SERVER c'est MERGE (depuis la version 2008).
    Sinon vous devez tester l’existence puis en déduire si c'est un update ou un insert.

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 109
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 109
    Points : 28 437
    Points
    28 437
    Par défaut
    Tout dépend...
    Si les lignes sont à traiter une à une, il suffit de laisser le SGBD traiter la chose tout seule. La commande INSERT échouera si la clé existe déjà, la commande UPDATE ne s'exécutera pas si la clé n'existe pas encore. En exécutant l'UPDATE avant l'INSERT, on limite le nombre d’opérations.

    Si les lignes à traiter sont le résultat d'une requête, là encore une requête UPDATE suivie d'une requête INSERT répond à toutes les problématiques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    update  matable as  tbl
    set     (   valeurs )
        =   (   select  qry.valeurs
                from    marequete   as qry
                where   qry.cle = tbl.cle
            )
    ;
    insert  into    matable
    select  *
    from    marequete   as qry
    where   not exists
            (   select  1
                from    matable as tbl
                where   tbl.cle = qry.cle
            )
    ;

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 902
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 902
    Points : 53 143
    Points
    53 143
    Billets dans le blog
    6
    Par défaut
    Le mieux serait d'utiliser l'instruction SQL MERGE qui est normative !

    A +

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/08/2013, 08h36
  2. Réponses: 6
    Dernier message: 02/11/2007, 22h49
  3. Réponses: 8
    Dernier message: 10/10/2006, 10h58
  4. Réponses: 3
    Dernier message: 09/07/2004, 10h23
  5. Réponses: 6
    Dernier message: 14/02/2003, 16h52

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