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 :

Remplir une table à partir des données d'une autre table


Sujet :

Langage SQL

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Remplir une table à partir des données d'une autre table
    Bonjour à tous ,
    J'ai un petit problème dans mon projet.
    En bref , j'ai 2 tables
    employés (cin,nom,prenom,nbr_heures_mois,prix_heure)
    nbr_heures_mois : le nombre d'heures à travailler par mois
    prix_heure : le prix d'une heure
    fiche_paie (id_fiche,cin# , nom# , prenom#,salaire )
    et le salaire est : nbr_heures_mois * prix_heure

    Mon problème est que je veux que la table fiche_paie soit remplie automatiquement à partir de la table employés.

    Et lorsqu'on ajoute un employé, sa fiche de paie sera automatiquement ajoutée aussi.

    Merci pour votre aide

    N.B :
    # j'ai essayé avec cette commande , mais toujours pas de solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO "fiche_paies" (nom,prenom,cin,salaire)  SELECT  (nom,prenom,cin,nbr_heuresmois*prix_heure)      FROM "employés"   WHERE fiche_paies.cin=employés.cin)

  2. #2
    Membre habitué
    Femme Profil pro
    Architecte de système d'information
    Inscrit en
    Février 2012
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2012
    Messages : 404
    Points : 127
    Points
    127
    Par défaut
    Essaie de suivre ce code (comporte aussi notion de jointure)

    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
     
    INSERT INTO tab_1
    (
    id_client, 
    nom, 
    adresse, 
    nombre_visite)
    SELECT 
    (
    cl.id_client,
    cl.nom, 
    cl.adresse, 
    vi.nombre_visite
    FROM client ci, visite vi
    WHERE ci.id_client=vi.id_client
    )
    NOte:
    Dans le select, tu peux faire ce que tu veux en respectant :
    1- le nombre de colonnes (égal à celui de la table de l'insert)
    2- respecter les types de données (en se reférant aux colonnes de la table d'insert)
    3- respecter les contraintes: insertion d'un champ NULL...

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je n'ai pas compris votre exemple... Est-ce que ce sont 2 tables avec les mêmes attributs ?

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    J'ai essayé avec cette commande , mais toujours pas de solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO "fiche_paies" (nom,prenom,cin,salaire)  SELECT  (nom,prenom,cin,nbr_heuresmois*prix_heure)      FROM "employés"   WHERE fiche_paies.cin=employés.cin)

  5. #5
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Customer Success Manager @Vertica
    Inscrit en
    Septembre 2008
    Messages
    8 452
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Customer Success Manager @Vertica
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 452
    Points : 17 820
    Points
    17 820
    Par défaut
    Votre ordre SELECT est indépendant de votre ordre INSERT.

    Vous mentionnez la table fiche_paies dans la clause WHERE du SELECT.
    Il faut supprimer cette clause WHERE.

  6. #6
    Nouveau Candidat au Club
    Inscrit en
    Décembre 2013
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Décembre 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Waldar Voir le message
    Votre ordre SELECT est indépendant de votre ordre INSERT.

    Vous mentionnez la table fiche_paies dans la clause WHERE du SELECT.
    Il faut supprimer cette clause WHERE.
    SVP expliquer un peu .. je suis un débutant en bd

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2010
    Messages
    945
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2010
    Messages : 945
    Points : 123
    Points
    123
    Par défaut
    Si j'ai bien compris tu veut qu'a chaque fois qu'un employé et ajouté on l'ajoute automatiquement dans fiche_paies avec la condition qu'il existe pas déjà?
    tu peut faire de cette manière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     for select nom,prenom,cin,(nbre_heuresmois*prix_heure) as salaire from employés do
       if not (exists(select fiche_paies.cin from fiche_paies where (cin<>:cin)) then
       INSERT INTO "fiche_paies" (nom,prenom,cin,salaire)  values(:nom,:prenom,:cin,:salaire)

  8. #8
    Membre du Club
    Homme Profil pro
    Reverse Engineering
    Inscrit en
    Juin 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Reverse Engineering

    Informations forums :
    Inscription : Juin 2013
    Messages : 31
    Points : 40
    Points
    40
    Par défaut
    Tu as deux problèmes indépendants apparemment:
    Le premier:

    Citation Envoyé par maajd Voir le message
    Mon problème est que je veux que la table fiche_paie soit remplie automatiquement à partir de la table employés.
    Le deuxième:
    Citation Envoyé par maajd Voir le message
    Et lorsqu'on ajoute un employé, sa fiche de paie sera automatiquement ajoutée aussi.
    Donc:

    1)Tu crée une requête qui va remplir "fiche_paie" à partir des données de "employés"(évite les accents)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO fiche_paie (nom,prenom,cin,salaire)
    SELECT nom,prenom,cin,nbr_heuresmois*prix_heure
    FROM employes

    2)Lorsque tu crée un nouvel employé dans "employés" tu remplis en meme temps "fiche_paie".(donc que tu es toutes les info sur le salaire sinon inutile)
    Si un commentaire t'a aidé pense à mettre un

  9. #9
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Mai 2002
    Messages
    3 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2002
    Messages : 3 173
    Points : 5 345
    Points
    5 345
    Par défaut
    bonjour,

    On peut voir apparaitre un problème de modélisation dans vos deux tables.

    La clef primaire de la table employés étant la colonne cin, seule celle-ci doit être référencé dans la table fiche_paie.

    Il ne faut pas rajouter le couple nom / prénom.

    Ceci vous évitera d'avoir des déphasages de donnée lorsque qu'une personne changera de nom ou de prénom.

  10. #10
    Modérateur

    Profil pro
    dba
    Inscrit en
    Janvier 2010
    Messages
    5 643
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : dba

    Informations forums :
    Inscription : Janvier 2010
    Messages : 5 643
    Points : 13 092
    Points
    13 092
    Par défaut
    Bonjour,
    Citation Envoyé par punkoff Voir le message
    On peut voir apparaitre un problème de modélisation dans vos deux tables.
    oui, plusieurs problème même !

    Je ne vois pas l'utilité de cette table fiche_paie dans ce contexte. Vous ne semblez pas garder d'historique, puisqu'elle ne contient pas de colonne Mois/annee...
    Lorsque vous voulez connaitre le salaire d'un employé, il suffit de faire directement de la calcul dans la requête.
    Vous devriez plutôt créer une vue, ou une colonne calculée dans la table employe

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/03/2015, 10h33
  2. Réponses: 3
    Dernier message: 13/08/2014, 18h14
  3. [MySQL] Remplir deux tables à partir des données d'une 3e table
    Par cleminute dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 11/09/2009, 22h06
  4. Update d'une table à partir des données d'une autre
    Par gregoryacf dans le forum Langage SQL
    Réponses: 2
    Dernier message: 21/04/2008, 14h02
  5. [TP] Remplir un tableau à partir des données d'un autre tableau
    Par The future scientist dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 27/05/2007, 17h31

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