Requête imbriquée ??? [ MySQL ] - SQL/NoSQL - Programmation
Marsh Posté le 06-03-2006 à 17:26:50
les sous requetes c'est pas terrible terrible ...
Avec des jointures tu dois pouvoir t'en sortir. Quelque chose dans le genre:
Code :
|
Marsh Posté le 06-03-2006 à 18:00:24
anapajari a écrit : les sous requetes c'est pas terrible terrible ...
|
J'ai fait quelques modifs sur la syntaxe de la jointure.
Je connaissais mal le left outer join, ca à l'air assez puissant.
Par contre je n'ai pas compris à quoi sert la fonction coalesce ni dans les champs selectionné ni dans le having.
Pourrais-tu m'éclairer ? Merci
Marsh Posté le 06-03-2006 à 18:07:48
en fait coalesce ça remonte le premier element de la liste qui est non nul.
Si jamais une des jointures ne te remontes rien ( ou si une des valeurs est 'null') tu vas avoir tes sums qui seront nulles ( 1 + 3 + NULL = NULL) et pareil pour la différence.
C'est juste pour éviter ça que j'ai rajouté le coalesce...
note: il est possible que cela soit inutile sur certains sgbd!
Marsh Posté le 07-03-2006 à 11:02:02
Après quelques essais, j'ai un problème.
Actuellement, l'historique ne compte qu'une et une seule entrée par variété.
La raison est simple, l'entrée du volume total se fait en une seule fois.
Par contre je peux avoir plusieurs sorties au fur et à mesure de la saison.
hinat hivar hidte hiqte
char char date int
- entree | varieteX | 22/02/06 | 150
- sortie | varieteX | 12/01/06 | 20
- sortie | varieteX | 27/02/06 | 80
stvar stqte
char int
varieteX | 50
Je vais tâcher d'être plus clair.
Si j'exécute :
Code :
|
J'obtiens :
VarieteX | 150 | 20
VarieteX | 150 | 80
Maintenant, j'execute :
SELECT |
J'obtiens :
VarieteX | 300 | 100
Les entrées ont été comptées 2 fois parceque il y avait 2 sorties ...
Je vais chercher de mon côté mais si quelqu'un passe par là et connaît la solution, je le remercie par avance
EDIT
Bon jsuis un boulay, il suffit de faire
Code :
|
Par contre ca ne marche que si il y a une et une seule entrée par variété (mon cas actuellement).
Si quelqu'un sait comment faire la même requête pour admettons 2 entrées et 3 sorties sur la même variété sans se tapper un produit carthésien de neuneu, ca m'intéresse, dès fois que la structure évolue
Marsh Posté le 07-03-2006 à 11:20:30
mouaip c'est normal, j'ai été un peu vite en besoigne
ça va être compliqué d'échapper à ce produit cartésien. Essaye en faisant tes 2 jointures séparement puis en faisant un union entre les deux.
Remarque ptêt que comme ça
Code :
|
Mais la faut tester je garantis rien du tout!
Marsh Posté le 07-03-2006 à 17:14:25
Ok merci pour la piste, dès que jai un peu de temps, je posterais la requête qui marche
Marsh Posté le 06-03-2006 à 17:15:35
Bonjour,
J'ai deux types de tables pour gérer mes stocks.
La table historique présente des lignes de 2 types (entrée/sortie) :
hinat hivar hidte hiqte
char char date int
- entree | varieteX | 22/02/06 | 150
- entree | varieteY | 22/02/06 | 1200
- sortie | varieteX | 27/02/06 | 50
etc ...
La table stock présente des lignes d'un seul type (il s'agit du stock réel) :
stvar stqte
char int
varieteX | 50
varieteY | 1200
La théorie voudrait que pour chaque variété : historique.entree - historique.sortie = stock
Mais apparement j'ai des écarts.
Donc je souhaiterais afficher les variétés pour lesquelles j'ai des écarts.
Actuellement j'ai écris ça :
select stvar,stqte from stock
where stvar!=
((select hiqte from historique where hivar=stvar and hinat='entree')
- <--- soustraction
(select hiqte from historique where hivar=stvar and hinat='sortie'));
Subquery returns more than a row
Toute aide est la bienvenue
Message édité par jeoff le 07-03-2006 à 11:02:31