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 :

Migrer les données d'une table à une autre table en update et insert


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 587
    Par défaut Migrer les données d'une table à une autre table en update et insert
    Bonjour à tous,

    Pourriez-vous m'aider s'il vous plaît ?

    Mon problème j'ai deux tables identiques en structures avec un id auto-incrémente

    Une table A
    - id PK
    - fbid
    -datestat

    Une table B
    - id PK
    - fbid
    - datestat

    Le mapping de A vers B est par la composition du fbid et datestat.
    Je voudrais du coup insert le couple fbid et datestat n'existe pas dans la table B et sinon l'update.

    Le souci est que je ne peux pas utiliser REPLACE, car fbid et datestat ne sont pas une pk.
    Quel serait la meilleure façon de faire ça s'il vous plaît?

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Bonjour,

    Ce n'est pas clair :
    Si le couple de valeurs (fbid, datestat) de A n'est pas trouvé dans B, on l'insère, ça d'accord
    Mais si ce même couple de valeurs(fbid, datestat) est trouvé, que voulez-vous mettre à jour ? Pour moi il n'y a rien à faire dans ce cas...

    Donnez un exemple de données en entrée dans chaque table et de résultat attendu en sortie, ce sera plus clair

  3. #3
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 587
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 587
    Par défaut
    Merci pour ta réponse

    J'ai finalement trouvé la solution.
    Pour clarifier c'était un upsert mais avec deux colonnes spécifiques date et fbid

    - On update les data dans la table de destination
    - On supprime ces data
    - On insère tout le reste

    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
    17
    18
    19
    20
    21
    22
    23
    24
     
    INSERT INTO table_b (fbid, date_stat, post_video_views) VALUE
        (1, '2022-01-01', 1),
        (2, '2022-01-01', 2),
        (3, '2022-01-01', 3);
     
     
    INSERT INTO table_a (fbid, date_stat, post_video_views) VALUE
        (1, '2022-01-01', 10),
        (4, '2022-01-01', 4);
     
    UPDATE table_b a, table_a b
    SET a.post_video_views = b.post_video_views
    -- etc 
    WHERE b.fbid = a.fbid
      AND b.date_stat = a.date_stat;
     
    DELETE
    FROM table_a
    WHERE EXISTS(SELECT 1 FROM table_b a WHERE table_a.fbid = a.fbid AND table_a.date_stat = a.date_stat);
     
    INSERT INTO table_b (fbid, date_stat, post_video_views)
    SELECT fbid, date_stat, post_video_views
    FROM table_a;

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 623
    Billets dans le blog
    10
    Par défaut
    Je comprends mieux, c'est que la description des tables dans la première question était donc erronée :

    Citation Envoyé par kevin254kl Voir le message
    Mon problème j'ai deux tables identiques en structures avec un id auto-incrémente

    Une table A
    - id PK
    - fbid
    -datestat

    Une table B
    - id PK
    - fbid
    - datestat

    Alors que la description est
    fbid, date_stat, post_video_views
    Le but est donc pour fbid et date_stat égaux de mettre à jour la colonne post_video_views, ce n'est pas la même chose
    Il est important de bien décrire le besoin et le contexte pour obtenir des réponses pertinentes


    Ce faisant, il y a plus simple en faisant un MERGE.
    Mais, MySQL ne connait pas le MERGE normalisé et l'a décliné en INSERT ON DUPLICATE UPDATE
    Voir ICI

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/07/2007, 13h26
  2. Réponses: 3
    Dernier message: 18/07/2006, 17h37
  3. Réponses: 3
    Dernier message: 09/04/2006, 12h58
  4. Réponses: 1
    Dernier message: 20/12/2005, 15h56
  5. récupérer juste les données d'une autre table
    Par rangernoir dans le forum Access
    Réponses: 5
    Dernier message: 13/09/2005, 14h52

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