Requete avec jointure sans doublons

Fermé
Titine-60 - 5 mars 2014 à 14:28
 Titine-60 - 21 mars 2014 à 15:34
Bonjour à tout ^^.
Je bute sur une requête qui pourtant ne m'a l'air pas si compliqué que cela...
J'ai trois tables avec comme id commun l'id client:
- 1 client : id, id_client
- 1 de remises : id, type_remise, montant_remise, #id_client
- 1 d'escomptes: id, type_escompte, montant_escompte, #id_client

Le problème est que si dans ma table il y a 2 remises pour le même client et 1 escompte du fait de ma requête la ligne escompte sera doublée.

Impossible de grouper l' escompte...

Mon collègue qui s'occupe du SQL étant en vacance si une âme charitable pouvait m'aider ça serai vraiment sympa
A voir également:

9 réponses

flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 14:56
Sous quelle forme souhaites-tu obtenir le résultat ?

Peux-tu fournir un exemple et le résultat que tu souhaites obtenir à partir de cet exemple ?
0
Bonjour,

Oui bien sur ^^

J'ai ceci :

LAVISSE - remise - 2014-02-15 - 4 €
LAVISSE - remise - 2014-02-23 - 8 €
LAVISSE - remise - 2014-02-28 - 7 €
LAVISSE - escompte - 2014-01-15 - 15 €
LAVISSE - escompte - 2014-01-15 - 15 €
LAVISSE - escompte - 2014-01-15 - 15 €

DUPONT - remise - 2014-02-02 - 2 €
DUPONT - remise - 2014-02-14 - 5 €
DUPONT - escompte - 2014-02-23 - 20 €
DUPONT - escompte - 2014-02-23 - 20 €

Je voudrais grouper les escomptes pour éviter qu'il me remette la ligne d'escompte à chaque fois qu'il y a une ligne de remise:

LAVISSE - remise - 2014-02-15 - 4 €
LAVISSE - remise - 2014-02-23 - 8 €
LAVISSE - remise - 2014-02-28 - 8 €
LAVISSE - escompte - 2014-01-15 - 15 €

DUPONT - remise - 2014-02-02 - 2 €
DUPONT - remise - 2014-02-14 - 5 €
DUPONT - escompte - 2014-02-23 - 20 €
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 15:34
Alors si j'ai bien compris, je te propose la requête suivante :

select id_client, type, date, montant
from client
inner join (
select id, 'remise' as type, date, montant from remises
union
select id, 'escompte' as type, date, montant from escomptes
) as data using(id)
0
Merci pour ton aide mais ça ne fonctionne pas sniff.

mais c'est ma faute je ne t'ai pas dit que c'était du PHP.

De plus Je ne comprend pas le "AS DATA USING(id)" peux tu m'expliquer ?

et je ne vois pas ou est fait le lien entre client.id et remise.id_client et escompte.id_client
0
flokocha Messages postés 1510 Date d'inscription lundi 8 mars 2004 Statut Membre Dernière intervention 10 octobre 2015 280
5 mars 2014 à 17:23
"Ça ne fonctionne pas" : c'est à dire ?

Tu as dit que ton collègue qui s'occupe du SQL est en vacances, j'en ai conclu que tu avais besoin d'une requête SQL, non ? À toi de l'intégrer dans ton php :)

"AS DATA USING(id)" : signifie que je crée une sous-requête que je nomme "data", que j'utilise dans une jointure avec la table "client" à partir de la colonne "id".

"et je ne vois pas ou est fait le lien entre client.id et remise.id_client et escompte.id_client" : Ce lien se fait donc à partir de cette fameuse jointure. :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ma requête PDO me sort une erreur...

Mais merci pour les explications en effet moi, à part les requête de base avec jointure simple... mais je n'aime pas recopier bêtement d'où mes questions ^^...

Je regarde ça demain au boulot et je tiens au jus et merci
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
5 mars 2014 à 21:03
Salut,

Dans la structure de table que tu as cité, tu ne mentionnes à aucun moment la présence de la colonne "date", alors que dans les exemple la date existe ?!

Peux tu réecrire la structure des tables sous ce format :
Nom de la Table (id, colonne_1, colonne_2, ..., #colonne_i)
0
Salut,

Oui je n'ai pas mis les vrais tables car j'aimerai comprendre et éviter de "pomper" vulgairement. (flokocha désolé si je t'ai fait bosser pour rien mais ta requête sera similaire a ce que je veux faire).

Les vrais tables se nomment : vendeurs, remises et escomptes

dans vendeurs : je n'ai besoin que du numéro de région du vendeur et surtout je ne peux pas la modifier

vendeurs (id,matricule_vendeur, region_vendeur)

remise(id, #matricule_vendeur, date, type, px_reel, px_vendu)

escompte(id, #matricule_vendeur, date, type, montant)

Encore merci pour votre aide
0
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
5 mars 2014 à 21:47
Ok, c'est très différent de la première structure !
Et est ce que les remises et escomptes ne dépendent pas d'un produit ?

Quelle est l'information que tu recherches a extraire ? les remises et les escomptes de chaque client ?
0
Non pas du tout je veux juste afficher les résultats comme ceci :

région - matricule - remise - 2014-02-02 - px_vendu - px_réel
région - matricule - remise - 2014-02-14 - px_vendu - px_réel
région - matricule - escompte - 2014-02-23 - montant

Trier par matricule vendeur et date

Bien sur il peut y avoir 2 escomptes par jour pour le même vendeur mais le soucis c'est que si j'ai 3 remises dans le mois pour les même vendeurs j'aurais tout les escomptes triplés...
0
Résolu merci de votre aide
0