Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2976 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête avec jointure externe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête avec jointure externe

n°1695200
dpin
Posté le 29-02-2008 à 16:53:44  profilanswer
 

Bonjour à tous,
 
Je me tourne vers vous car j'ai une requête à coder et j'ai eu beau suivre tous les tutoriaux trouvés sur internet, je ne m'en sors pas...
 
Je dispose de 3 tables dont voici la structure :
 
table site            table stock               table statarticle
----------            -----------               -----------------
numerosite            numerosite                numerosite
nomsite               clefarticle               clefarticle
                      qtestock                  qtevendue
                      clefprimaire              datevente
                                                clefprimaire
 
J'aimerais obtenir dans un même tableau la qtestock et la qtevendue par article par site sur une certaine période, mais je n'y arrive pas !
 
Mon tableau devra donc être constitué des 4 colonnes suivantes : clefarticle,nomsite,qtestock,qtevendue
 
Les relations entre tables étant bien sûr que :
site.numerosite = stock.numerosite
stock.numerosite = statarticle.numerosite
site.numerosite = statarticle.numerosite
stock.clefarticle = statarticle.clefarticle
 
 
Je vais limiter mon exemple à une valeur prédéfinie pour clefarticle (871620), et à une période donnée.
 
1. Pour obtenir les valeurs issues de ma table stock pour l'article '871620', je fais tout simplement :
 
select clefarticle,nomsite,qtestock from stock,site where (stock.numerosite=site.numerosite) and (clefarticle='871620');
 
ce qui me donne pour résultat :
+-------------+---------+----------+
| clefarticle | nomsite | qtestock |
+-------------+---------+----------+
| 871620      | SITE1   |     5.00 |
| 871620      | SITE2   |    61.00 |
| 871620      | SITE3   |     9.00 |
+-------------+---------+----------+
 
2. Pour obtenir les valeurs issues de ma table statarticle pour l'article '871620' sur la période du 01/01/08 au 31/01/08, je fais tout simplement :
 
select clefarticle,nomsite,SUM(quantitevendue) as 'QV' from statarticle,site where (statarticle.numerosite=site.numerosite) and (datevente between '2008-01-01' and '2008-01-31') and (clefarticle='871620') group by statarticle.numerosite;
 
ce qui me donne pour résultat :
+-------------+---------+--------+
| clefarticle | nomsite | QV     |
+-------------+---------+--------+
| 871620      | SITE1   | 1.0000 |
| 871620      | SITE2   | 3.0000 |
+-------------+---------+--------+
 
3. Pour obtenir le tableau combiné des deux, j'utilise la requête suivante :
 
select statarticle.clefarticle,nomsite,SUM(statarticle.quantitevendue) as 'QV',stock.qtestock from statarticle,stock,site where (statarticle.clefarticle=stock.clefarticle) and (statarticle.numerosite=stock.numerosite) and (statarticle.numerosite=site.numerosite) and (datevente between '2008-01-01' and '2008-01-31') and (statarticle.clefarticle='871620') group by statarticle.numerosite;
 
ce qui me donne pour résultat :
+-------------+---------+--------+----------+
| clefarticle | nomsite | QV     | qtestock |
+-------------+---------+--------+----------+
| 871620      | SITE1   | 1.0000 |     5.00 |
| 871620      | SITE2   | 3.0000 |    61.00 |
+-------------+---------+--------+----------+
 
mais il me manque donc les informations sur le SITE3 !!!
 
 
Pour résoudre ce problème, et donc garder les lignes issues de la table stock pour lesquelles il n'y a pas de correspondance dans la table statarticle, j'ai vu qu'il fallait utiliser une jointure externe. Voici donc ma requête corrigée (sans la table site car je n'ai pas su comment faire avec...):
 
select statarticle.clefarticle,statarticle.numerosite,SUM(statarticle.quantitevendue) as 'QV',stock.qtestock from statarticle RIGHT JOIN stock USING (clefarticle,numerosite) where (datevente between '2008-01-01' and '2008-01-31') and (statarticle.clefarticle='871620') group by statarticle.numerosite;
 
 
ce qui me donne exactement le même résultat que ci-dessus sans avoir utilisé de jointure externe... donc ma jointure n'est apparemment pas reconnue...
 
 
De plus, je ne sais pas comment utiliser ma table site dans cette requête pour garder la correspondance avec le nom du site...
 
 
Comment faire pour obtenir le tableau suivant qui est mon objectif ?
+-------------+---------+--------+----------+
| clefarticle | nomsite | QV     | qtestock |
+-------------+---------+--------+----------+
| 871620      | SITE1   | 1.0000 |     5.00 |
| 871620      | SITE2   | 3.0000 |    61.00 |
| 871620      | SITE3   |   NULL |     9.00 |
+-------------+---------+--------+----------+
 
Merci d'avance pour votre aide, je ne m'en sors pas...
 
Cordialement,
 
Delphine

mood
Publicité
Posté le 29-02-2008 à 16:53:44  profilanswer
 

n°1695219
babasss
Posté le 29-02-2008 à 17:10:18  profilanswer
 

Je pense qu'il y a un soucis dans tes tables, ou peut être que je ne comprends pas tout.... Pourquoi as-tu le numéro de site dans la table statarticle ?
Parce que tes liaisons sont du coup illogique (celles au niveau de numerosite) :

dpin a écrit :


    table site            table stock             table statarticle
    ----------            -----------           -----------------
|-> numerosite  <---->  numerosite  <----> numerosite <---|
|    nomsite                clefarticle <------>  clefarticle        |
|                           qtestock                 qtevendue          |
|                           clefprimaire              datevente          |
|                                                        clefprimaire         |
|__________________________________________________|


Ta difficulté à obtenir un résultat peut venir de là.


Message édité par babasss le 29-02-2008 à 17:10:53

---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1696105
dpin
Posté le 03-03-2008 à 09:58:03  profilanswer
 

Bonjour,
 
Mes tables sont correctes, c'est juste que la clé primaire de chaque table est différente de clefarticle et numerosite.
Pour avoir correspondance entre mes tables stock et statarticle, il me faut bien avoir le même numerosite et la même clefarticle.
 
Pour que tu comprennes mieux, j'ai plusieurs sites qui réalisent des ventes d'article. Ma table statarticle comporte les quantités vendues de tous les articles sur tous les sites pour chaque date. Donc la clé primaire serait en fait composée par (numerosite,clefarticle,datevente).
Ma table stock m'indique les articles qui sont en stock sur chaque site. La clé primaire est donc composée de (numerosite,clefarticle).
 
Je veux obtenir un tableau m'indiquant pour un article précis et une date de vente précise, la quantité en stock de cet article sur chaque site avec la quantité vendue correspondante sur chaque site à la date indiquée.
 
Merci pour votre aide, car je n'arrive pas à réaliser cette requête...
 
Cordialement,
 
Delphine

n°1696199
babasss
Posté le 03-03-2008 à 11:36:27  profilanswer
 

Je partirais vers quelquechose comme ca (peut etre à adapter un peu)

Code :
  1. SELECT statarticle.clefarticle, nomsite, sum(qtestock) AS QS, sum(qtevendue) AS QV
  2. FROM stock
  3.  INNER JOIN site ON stock.numerosite = site.numerosite
  4.  INNER JOIN statarticle ON stock.numerosite = statarticle.numerosite
  5.  INNER JOIN statarticle ON stock.clefarticle = statarticle.clefarticle
  6. WHERE (datevente BETWEEN '2008-01-01' AND '2008-01-31')
  7.  AND (clefarticle='871620')
  8. GROUP BY statarticle.numerosite, statarticle.clefarticle;


---------------
Feedback : http://forum.hardware.fr/hfr/Achat [...] 2666_1.htm
n°1696266
dpin
Posté le 03-03-2008 à 13:53:27  profilanswer
 

Ta requête ne fonctionne pas hélas, je vais chercher encore.
Merci tout-de-même d'avoir regardé...
 
Cordialement,
 
Delphine


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête avec jointure externe

 

Sujets relatifs
lien externe en lecture seule[MySQL] Requète aléatoire en fonction du jour
D'une requête SQL au VBA[MySQL] Problème avec Jointure ( et plusieurs COUNT sur même table)
Requete simultanee sur 2 tablesProblème Requete SQL
Plusieurs count dans une requete = multiplicationUtliser une bibliotheque externe sous eclipse
Probème de requête avec jointure externe Requête complexe : probable jointure externe
Plus de sujets relatifs à : Requête avec jointure externe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR