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 :

mise a jours 1 table avec 2 table


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Points : 92
    Points
    92
    Par défaut mise a jours 1 table avec 2 table
    bonjour,


    je voudrais mettre à jours mes fiches articles (prix achat) avec 2 tables
    sur la dernier date entrée (sous-linux)

    table1 = article
    champ = nom, code , prix_achat

    table2 = liste des entrees des article
    champ = code , prix_achat, qte , date entree

    table3 = liste des entrees des articles grossiste
    champ = code , prix_achat, qte , date entree.

    exemple :

    table1
    stylo , 123456 , 15€
    piles , 123460 , 2€
    radio , 123401 ,3€

    table2
    123456 , 13€ , 24 , 24/10/2009
    123460 , 11€ , 4 , 23/10/2009
    123456 , 11€ , 24 , 22/10/2009

    table3
    123456 , 14€ , 12 , 24/11/2009
    123401 , 20€ , 24 , 20/10/2009



    Resulta finale apres requette:

    table1
    stylo , 123456 , 14€
    piles , 123460 , 11€
    radio , 123401 ,20€


    Pouvez-vous m'aide?Je vois pas trop comment faire avec 2 tables
    Merci.

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 397
    Points
    28 397
    Par défaut
    Si je reformule ta question, tu veux rechercher le prix le plus récent d'un article dans les deux tables table2 et table 3 ?
    Il suffit de travailler sur l'union de ces deux tables en la considéreant comme une seule. Ensuite, il s'agit simplement d'appliquer la requête classique de recherche du plus récent...

    Je mets en forme la requête et je la poste au plus tôt.

  3. #3
    Membre régulier
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Points : 92
    Points
    92
    Par défaut
    oui, c'est bien sa...

    j'ai du mal a faire des requetes sql avec les union et les max, alors trois je vois pas comment faire

    merci de ton aide

  4. #4
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 099
    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 099
    Points : 28 397
    Points
    28 397
    Par défaut
    Voici la requête qui retourne les valeurs attendues dans table1. Je te laisse opérer la conversion en UPDATE.
    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    SELECT  t1.nom
        ,   t1.code
        ,   t0.prix_achat
    FROM    table1  AS t1
        INNER JOIN
            (   SELECT  code
                    ,   prix_achat
                    ,   qte
                    ,   date entree
                FROM    table2
            UNION
               SELECT   code
                    ,   prix_achat
                    ,   qte
                    ,   date entree
                FROM    table3
            )   AS t0
            ON  t1.code = t0.code
    WHERE   EXISTS
            (   SELECT  1
                FROM    (   SELECT  code
                                ,   prix_achat
                                ,   qte
                                ,   date entree
                            FROM    table2
                        UNION
                           SELECT   code
                                ,   prix_achat
                                ,   qte
                                ,   date entree
                            FROM    table3
                        )   AS tt
                WHERE   t0.code = tt.code
                HAVING  t0.date entree = MAX(tt.date entree)
            )
    A noter que s'il y a des entrées à la même date dans table2 et table3, il faudra trouver un moyen de choisir la bonne

    D'un point de vue de conception du moèle de données (s'il t'est possible d'y remédier) il serait plus simple d'avoir une seule table pour les entrées d'article avec un marqueur pour celles qui proviennent du grossiste.

  5. #5
    Membre régulier
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Points : 92
    Points
    92
    Par défaut
    Merci de ton aide, je vais l'esssayer cette apres midi.

    tu peux me la mettre en update , stp.

    comme sa je ferai pas d'erreur.

    Grand merci

  6. #6
    Membre régulier
    Inscrit en
    Août 2003
    Messages
    228
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 228
    Points : 92
    Points
    92
    Par défaut
    je viend de l'essaye, elle ne fonctionne pas.
    je pensse que le system n'aime pas les jointures

    je pensse que serais bien de creer une table temporaire, incorpore mes donnnees

    et faire la mis a jour avec cette table temp.

    quand pensse-tu?

    voici la requete que tu mas fait avec mes donnees

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
     
    SELECT  t1.cod_cip
        ,   t1.des_art
        ,   t0.ach_pon
    FROM    sarticle AS t1
        INNER JOIN
    (   SELECT  cod_cip
    ,   pri_ach
    ,   qte_achat
    ,   dat_ent
    FROM    lregfour
    UNION
             SELECT   l.cod_cip
                  ,   l.pu
                  ,   l.qte
                  ,   r.dat_ach
                FROM    retro r, lretro l
                where r.cod_fac = l.cod_fac
            )   AS t0
            ON  t1.cod_cip = t0.cod_cip
    WHERE   EXISTS
            (   SELECT  1
                FROM    (   SELECT  cod_cip
                                ,   pri_ach
                                ,   qte_achat
                                ,   dat_ent
                            FROM    lregfour
                        UNION
                           SELECT   l.cod_cip
                                ,   l.pu
                                ,   l.qte
                                ,   r.dat_ach
                            FROM     retro r, lretro l
                            where r.cod_fac = l.cod_fac
                        )   AS tt
                WHERE   t0.cod_cip = tt.cod_cip
                HAVING  t0.dat_ent = MAX(tt.dat_ent)
            )

Discussions similaires

  1. [MySQL] Mettre à jour une table avec plusiers tables
    Par lez-j dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 13/02/2010, 21h37
  2. Mise à jour des données d'une table avec un SELECT
    Par bouddine dans le forum Langage SQL
    Réponses: 0
    Dernier message: 20/05/2008, 16h36
  3. Réponses: 3
    Dernier message: 23/08/2006, 15h27
  4. Remplir une Table avec 2 tables
    Par Titouf dans le forum Oracle
    Réponses: 4
    Dernier message: 03/11/2005, 09h35

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