Bonjour à tous,
Je suis sur un cas pratique de jointure afin de traiter des abonnements clients.
Je vais essayer de donner le maximum d'infos et d'expliquer au mieux ce que je souhaite, en espérant ne rien oublier et ne pas faire d'erreurs de retranscription.
Dans la problématique il peut y avoir plusieurs abonnements, ces abonnements ont des options (des critères propre) et des durées. Un abonnement peu avoir plusieurs durée (en mois dans mon cas).
Il peut y avoir également des promotions sur un abonnement en fonction de sa durée.
Le but est d'extraire tous les abonnements avec leurs options, leurs durées, leurs tarifications et leurs promotions si promotions il y a.
Voici un exemple de deux abonnements identiques mais de durée différente dont l'un fait l'objet d'une promotion évènementielle: (voici ce que je souhaite obtenir à l'issue de la requête sql)
Abonnement1:
-critère A
-critère B
-critère C
=>Durée 3 mois
et
Abonemment1:
-critère A
-critère B
-critère C
=>Durée 6 mois
promotion spéciale un objet offert
J'ai organisé le stockage de données en 5 tables :
La première : contient le nom des abonnement
La deuxième : contient les options (critères) pour chaque abonnement
La troisième : contient les différentes durées pour chaque abonnement et la tarification
La quatrième : contient la répartition des promotions et des quantités offerte par abonnement et durée d'abonnement
La cinquième : contient la liste des objets promotionnels.
J'ai fait un schéma des tables où les clefs de jointure sont colorisées :
Voici la requête que j'ai mis en place avec un critère "WHERE id_tbl_abonnement = 1":
En se basant sur le schéma ci-dessus et ma requête voila ce que j'obtiens:
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 SELECT * FROM tbl_abonnement as a INNER JOIN tbl_abo_opt as ao ON a.id_tbl_abonnement = ao.id_abo_tbl_abo_opt INNER JOIN tbl_abo_duree as ad ON a.id_tbl_abonnement = ad.id_abo_tbl_abo_duree LEFT OUTER JOIN tbl_opt_promo as op ON op.id_duree_tbl_opt_promo = ad.id_tbl_abo_duree INNER JOIN tbl_opt_free as o ON o.id_tbl_opt_free = op.id_opt_tbl_opt_promo WHERE a.id_tbl_abonnement = '1'
Abo1:
-Opt1
-Opt2
6mois - 18€
N1 - D1
N2 - D2
L'Abo1 de 3 mois a été ignoré car il n'a pas de promotion d'ou l'intérêt de faire une jointure externe je pense.
Voila ce que je souhaite obtenir :
Abo1:
-Opt1
-Opt2
6mois - 18€
N1 - D1
N2 - D2
et
Abo1:
-Opt1
-Opt2
3mois - 10€
Merci à tous pour votre aide.
Partager