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 :

Insertion de valeurs dans une colonne de table


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Insertion de valeurs dans une colonne de table
    Bonjour,

    voici mon problème :

    je travaille sur Access 2002.

    Pour faire simple, je dispose de 2 tables :
    - une table de référence mise à jour régulièrement (chaque jour, la nouvelle table écrase automatiquement l'ancienne)
    - une table sur laquelle je travaille, dans laquelle j'ai inséré les valeurs de certaines colonnes de cette table de référence à l'aide d'un INSERT INTO.

    Jusque-là, pas de problème.
    Mais le hic, c'est que j'ai besoin à présent d'insérer les valeurs d'une colonne supplémentaire de cette table de référence. Et là, c'est l'enfer! J'ai créé la variable mais le INSERT INTO insère des lignes entières et non seulement les valeurs d'une colonne par ligne. Donc je me retrouve avec une colonne vide à remplir.

    Existe t-il une solution autre que mannuelle (ça fait quand même 10000 lignes à se taper)?

    Merci de votre aide précieuse!

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 103
    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 103
    Points : 28 394
    Points
    28 394
    Par défaut
    Pour pouvoir commencer à donner un début de réponse, il nous faudrait connaître la structure des tables en jeu ainsi qu'une ébauche de la requête que vous tentez d'effectuer.
    Règles du forum Langage SQL à lire par tous

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut
    Bonjour et merci d'avoir répondu :

    La structure des 2 tables est donnée en pièce jointe (table de référence et table de saisie)

    Voici le script d'insertion (j'ai sauté des lignes entre les clauses):

    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 Saisie2 ( ID_PATIENT, ORDRE_FICHE, ID_DESCRIPTION_CLINIQUE, 
    STATUT_THERAPEUTIQUE_MALADIE, LOCALISATION_SIEGE_TUMEUR, SS_GROUPE_SIEGE_TUMEUR, 
    TOPOLOGIE_SIEGE_TUMEUR, RECHUTE )
     
    SELECT d.ID_PATIENT, d.ORDRE_FICHE, d.ID_DESCRIPTION_CLINIQUE, d.STATUT_THERAPEUTIQUE_MALADIE, 
    d.LOCALISATION_SIEGE_TUMEUR, d.SS_GROUPE_SIEGE_TUMEUR,
    d.TOPOLOGIE_SIEGE_TUMEUR, d.RECHUTE
     
    FROM fichepatient 
    LEFT JOIN 
     (descriptionclinique AS d 
     LEFT JOIN 
      Saisie2 
      ON (d.ID_PATIENT=Saisie2.ID_PATIENT) 
      AND (d.ORDRE_FICHE=Saisie2.ORDRE_FICHE) 
      AND (d.ID_DESCRIPTION_CLINIQUE=Saisie2.ID_DESCRIPTION_CLINIQUE)
     ) 
     ON (fichepatient.ID_PATIENT=d.ID_PATIENT) 
     AND (fichepatient.ORDRE_FICHE=d.ORDRE_FICHE)
     
    WHERE (((d.ID_PATIENT) Not In (Saisie2.ID_PATIENT)) 
     And ((d.ORDRE_FICHE) Not In (Saisie2.ORDRE_FICHE)) 
     And ((d.ID_DESCRIPTION_CLINIQUE) Not In (Saisie2.ID_DESCRIPTION_CLINIQUE)) 
     And fichepatient.VALIDEE=1);
    Mon problème c que quand j'essaie d'insérer le les valeurs du champ STATUT_THERAPEUTIQUE_MALADIE (que j'ai créé plus tard dans la table de saisie), ça ne fonctionne et j'ai une colonne sans valeurs.

    PS : sur le script, on voit une table fichepatient : c'est une table liée à la table de saisie sans réel intérêt pour le problème.

    Je suis vraiment bloqué la dessus en ce moment. Pouvez-vous m'aidez?

    Merci d'avance.
    Images attachées Images attachées   

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Citation Envoyé par lmontangon Voir le message
    Mais le hic, c'est que j'ai besoin à présent d'insérer les valeurs d'une colonne supplémentaire de cette table de référence. Et là, c'est l'enfer! J'ai créé la variable mais le INSERT INTO insère des lignes entières et non seulement les valeurs d'une colonne par ligne. Donc je me retrouve avec une colonne vide à remplir.
    Si j'ai bien compris, c'est un UPDATE et non un INSERT que tu veux faire.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut re
    Oui mais je ne sais pas s'il est possible de faire un UPDATE d'une ou plusieurs colonnes en y insérant des valeurs d'une autre table. Ou alors ça me parait compliqué car j'ai 10000 lignes à mettre à jour donc le Update risque d'être long..

    Je ne vois vraiment pas ce que je peux faire.

  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 879
    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 879
    Points : 53 057
    Points
    53 057
    Billets dans le blog
    6
    Par défaut
    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
    INSERT INTO Saisie2 ( ID_PATIENT, ORDRE_FICHE, ID_DESCRIPTION_CLINIQUE, 
    STATUT_THERAPEUTIQUE_MALADIE, LOCALISATION_SIEGE_TUMEUR, SS_GROUPE_SIEGE_TUMEUR, 
    TOPOLOGIE_SIEGE_TUMEUR, RECHUTE )
     
    SELECT d.ID_PATIENT, d.ORDRE_FICHE, d.ID_DESCRIPTION_CLINIQUE, d.STATUT_THERAPEUTIQUE_MALADIE, 
    d.LOCALISATION_SIEGE_TUMEUR, d.SS_GROUPE_SIEGE_TUMEUR,
    d.TOPOLOGIE_SIEGE_TUMEUR, d.RECHUTE
     
    FROM fichepatient AS f
         LEFT OUTER JOIN descriptionclinique AS d
              ON     f.ID_PATIENT  = d.ID_PATIENT
                 AND f.ORDRE_FICHE = d.ORDRE_FICHE
        LEFT JOIN Saisie2 s
              ON     d.ID_PATIENT              = s.ID_PATIENT
                 AND d.ORDRE_FICHE             = s.ORDRE_FICHE
                 AND d.ID_DESCRIPTION_CLINIQUE = s.ID_DESCRIPTION_CLINIQUE
     
    WHERE d.ID_PATIENT              <> s.ID_PATIENT 
     AND  d.ORDRE_FICHE             <> s.ORDRE_FICHE
     AND  d.ID_DESCRIPTION_CLINIQUE <> s.ID_DESCRIPTION_CLINIQUE
     AND  f.VALIDEE = 1;
    Beaucoup d'erreurs dans votre code :
    1) NOT IN ne sert à rien si n'est pas suivi d'une sous requête ou d'une liste explicite. Donc mettre différent <>.
    2) utilisez des alias pour vos tables
    3) précisez vos jointures au bons endroits

    A +

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Vienne (Limousin)

    Informations forums :
    Inscription : Septembre 2006
    Messages : 7
    Points : 5
    Points
    5
    Par défaut Merci
    Merci pour toutes vos réponses.

    J'ai bien pris en compte les améliorations de mon code d'insertion.

    Finalement, j'ai réussi à faire un UPDATE de tous les champs consernés en y insérant les valeurs de la table fichepatient de référence. Finalement c'était pas bien sorcier mais il m'aura fallu du temps

    Voici le code que j'ai produis :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    UPDATE Saisie1 LEFT JOIN fichepatient ON (Saisie1.ORDRE_FICHE = 
     
    fichepatient.ORDRE_FICHE) AND (Saisie1.ID_PATIENT = 
     
    fichepatient.ID_PATIENT) 
    SET Saisie1.INTITULE_REUNION = fichepatient.INTITULE_REUNION, 
    Saisie1.NOM_UCP = fichepatient.NOM_UCP, 
    Saisie1.DATE_HEURE_REUNION = fichepatient.DATE_HEURE_REUNION, 
    Saisie1.NOM = fichepatient.NOM, 
    Saisie1.PRENOM = fichepatient.PRENOM
    WHERE ((([fichepatient].[ID_PATIENT])=[Saisie1].[ID_PATIENT]) AND 
     
    (([fichepatient].[ORDRE_FICHE])=[Saisie1].[ORDRE_FICHE]));
    Tous les champs sont maintenant pleins et à présent je peux mettre à jour mes tables dès que nécessaire (car les tables de références sont souvent sujettes à des modifications).

    Encore merci!

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 01/10/2014, 17h34
  2. Réponses: 8
    Dernier message: 19/11/2010, 10h19
  3. Réponses: 3
    Dernier message: 14/05/2007, 11h00
  4. insertion des valeurs dans une colonne
    Par freestyler1982 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 24/01/2007, 16h38
  5. intervertir les valeurs dans une colonne d'une table
    Par hammou dans le forum Débuter
    Réponses: 2
    Dernier message: 26/01/2004, 10h15

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