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 :

Recopie d'une valeur entre 2 tables


Sujet :

Requêtes MySQL

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2023
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Recopie d'une valeur entre 2 tables
    Bonjour,

    Je cherche à récopier DO_DateLivr de la table F_DOCENTETE vers le champs DO_DateLivr de la table F_DOCLIGNE quand Do_Piece est le même

    j'ai fait la requête suivante, mais je n'obtiens pas de résultat. Je ne sais pas si mon filtre est bien appliqué.


    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO F_DOCLIGNE
                             (DO_DateLivr)
    SELECT        F_DOCENTETE.DO_DateLivr
    FROM            F_DOCENTETE INNER JOIN
                             F_DOCLIGNE AS F_DOCLIGNE_1 ON F_DOCENTETE.cbMarq = F_DOCLIGNE_1.cbMarq
    WHERE        (F_DOCLIGNE_1.DO_Piece = 'BC0118392')

    Je vous remercie pour votre aide. :-)

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    Ton énoncé laisse penser à un UPDATE de colonne, mais tu illustres cela avec un INSERT (nouvelle ligne), je ne sais donc quoi penser.
    D'autant plus que généralement on évite de dupliquer les informations (ici DO_DateLivr), une jointure ou une vue seraient probablement plus indiquées.

    Pour qu'on y voit plus clair :
    Donne un échantillon de tes tables dans leur état initial
    Donne le résultat que tu souhaites obtenir
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    D'accord avec Séb., il ne faut jamais créer de redondance, à l'exception des clefs étrangères, une colonne (et non pas un "champ") ne doit être présente que dans une seule table. La dupliquer est un erreur de modélisation qui conduit à des risques d'incohérences.

    Merci de pense à encadrer le code avec les balises CODE (bouton # de la barre d'icones)

    Voici comment procéder :


    J'ai corrigé votre précédente réponse pour les ajouter, mais pensez-y la prochaine fois

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Août 2023
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chargé d'affaire

    Informations forums :
    Inscription : Août 2023
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Merci pour vos retour, je suis nouveau sur le forum est pas familier du SQL.

    Je ne peux pas modifier la structure de la base car c'est celle de l'ERP ou je travaille (SAGE)

    La base contient 2 tables qui gèrent les document de vente une pour l'entête et une pour les lignes de ventes (F_DOCLIGNE) et un pour les entêtes de document (F_DOCENTETE); au 2 niveau nous pouvons renseigner des dates de livraisons différentes, dans les 2 tables : DO_Datelivr, le nom est identique au 2 endroits !.

    J'aimerai déclencher périodiquement une requête qui écrit sur les ligne de vente, la date à copier se trouve dans F_DOCENTETE, les documents peuvent être retrouver via le DO_Piece (en gros le numéro de commande est présent dans les 2 tables).

    Je vous remercie pour votre aide !

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    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 136
    Points : 38 910
    Points
    38 910
    Billets dans le blog
    9
    Par défaut
    D'accord, c'est donc l'ERP qui est mal modélisé, ce n'est pas une surprise, c'est souvent le cas :
    l'un de mes clients utilise un logiciel du marché ayant des tables de plus de 200 colonnes avec des PK sémantiques de type varchar de plus de 100 octets

    Pour qu'on puisse répondre efficacement à la question, il faut communiquer la description exacte des tables en jeu (idéalement le script contenant les ordres CREATE TABLE)

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 104
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 104
    Points : 8 222
    Points
    8 222
    Billets dans le blog
    17
    Par défaut
    La base contient 2 tables qui gèrent les document de vente une pour les lignes de ventes (F_DOCLIGNE)
    et un pour les entêtes de document (F_DOCENTETE);
    au 2 niveau nous pouvons renseigner des dates de livraisons différentes, dans les 2 tables : DO_Datelivr, le nom est identique au 2 endroits !.
    J'aimerai déclencher périodiquement une requête qui écrit sur les ligne de vente, la date à copier se trouve dans F_DOCENTETE, les documents peuvent être retrouver via le DO_Piece (en gros le numéro de commande est présent dans les 2 tables).
    Voilà donc ce que l'on sait :

    F_DOCENTETE (DO_Piece, DO_Datelivr)
    F_DOCLIGNE (DO_Datelivr, #DO_Piece)

    C'est mince mais on peut tenter :

    UPDATE F_DOCLIGNE AS fdl
    INNER JOIN F_DOCENTETE AS fde ON fdl.DO_Piece = fde.DO_Piece
    SET fdl.DO_Datelivr = fde.DO_Datelivr
    -- Peut-être prévoir quelque chose pour ne pas écraser des valeurs déjà renseignées ?
    -- Ex. :
    WHERE fdl.DO_Datelivr IS NULL
    ;
    => Met à jour la colonne F_DOCLIGNE.DO_Datelivr selon la colonne F_DOCENTETE.DO_Datelivr de la pièce

    Attention tout de même, l'opération me paraît périlleuse et ne sera peut-être pas sans conséquence pour ton ERP
    Je dégage toute responsabilité, etc.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

Discussions similaires

  1. [PDO] tranferer une valeur entre deux tables
    Par JPBruneau dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 31/03/2020, 08h40
  2. faire une différence entre deux tables
    Par geay dans le forum Langage SQL
    Réponses: 1
    Dernier message: 04/09/2006, 15h33
  3. Réponses: 9
    Dernier message: 24/04/2006, 09h13
  4. Réponses: 2
    Dernier message: 22/01/2006, 01h11
  5. Optimisation d'une jointure entre 3 tables
    Par gavelin dans le forum Langage SQL
    Réponses: 4
    Dernier message: 14/12/2005, 09h52

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