Grosse requete sur 5 tables, besoin des conseils d'un pro... [résolu]

Grosse requete sur 5 tables, besoin des conseils d'un pro... [résolu] - SQL/NoSQL - Programmation

Marsh Posté le 15-03-2005 à 16:56:50    

Bonjour,
 
Je bosse sous postgresql 8.0.
 
Malgrés mes efforts, je ne parviens pas à gerer de grosses requêtes sur plusieurs tables. J'ai bien tenté d'utiliser les "UNION" et les sous-"SELECT" mais apparament ca ne suffit pas pour resoudre mon probleme.
 
Je m'explique :  
 

Tables
-------
 
CLIENTS
- id_client
 
ABONNEMENTS
- id_abonnement
- id_type_abo
- id_client
 
TYPES_ABONNEMENTS
- id_type_abo
- id_cours
 
PAIEMENTS
- id_paiement
- id_abonnement
 
COURS
- id_cours


 
Je vous passe les autres champs des tables qui sont inutiles pour trouver une solution, ce qui importe c'est les clés primaire et clés étrangeres.
 
Le problème :
 
Si avec ces 5 tables je fais une vue, n'apparaitront que les clients qui ont un abonnement ainsi que uniquement les clients qui ont effectué un paiement. Car je procède comme ceci :  
 

SELECT * FROM clients, abonnements, types_abonnements, paiements, cours
WHERE  
   clients.id_client=paiements.id_clients AND
   abonnements.id_abonnements...... et pareil avec les autres relations.


 
 
Donc ma question est, comment m'y prendre, pour avoir en une seule requete, un listing de tous les paiements, enregistré, ainsi que tous les abonnements enregistrés pour chaque clients, et faire en sorte que même si certains clients n'ont pas d'abonnements, et/ou n'ont pas encore fait de paiements pour certains abonnement, ces clients s'affichent quand même dans la table retournée en resultat ?
 
J'ai besoin de pouvoir faire ca, car sinon lors du listing des clients, je devrais faire une requête supplémentaire pour chaque client, car par exemple j'affiche en rouge ceux qui sont pas en ordre et en vert ceux qui le sont, ou encore en gris ceux qui n'ont pas d'abonnements en cours... etc...
 
donc jai pas envie qu'un operation se fasse en 100 requetes.
Si il n'y a pas moyen de faire ca en une requete, a la limite si il font ne faire 3 ou 4, avec des sous select pq pas ca me gene pas, quand il faut il faut. mais pas une requete pour chaque neregistrement ca me parrait incoherant.
 
Voila les pro du SQL si vous avez deja rencontré ce probleme, et encore mieux avez une ou plusieurs solutions a me proposer, je suis preneur! car je galère un peu là. :(
 
Merci d'avance tlm ^^
 
A+


Message édité par Gat$ le 16-03-2005 à 00:51:09
Reply

Marsh Posté le 15-03-2005 à 16:56:50   

Reply

Marsh Posté le 15-03-2005 à 16:58:17    

Jointures externes.
 
[edit]
 
Si j'ai bien lu, j'ai survolé, juste... :whistle:


Message édité par skeye le 15-03-2005 à 16:58:45

---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 15-03-2005 à 17:00:52    

Ok merci pour ta reponse je v regarder ca de plus pres des mon retour je dois filer, je reposterai si j'ai encore un prob :D
 
a+

Reply

Marsh Posté le 16-03-2005 à 00:20:40    

Ha ben c'est un super outil ca les jointures externes :)
 
Merci bcp entk c exactement ca qu'il me fallait!  :D
 
a+
 

Reply

Marsh Posté le 16-03-2005 à 00:49:54    

Pour ceux que ca peut interresser :
 

SELECT * FROM (((clients LEFT OUTER JOIN abonnements ON clients.id_client = abonnements.id_client) LEFT OUTER JOIN paiements ON abonnements.id_abo = paiements.id_abonnement) LEFT OUTER JOIN abonnements_types ON abonnements.id_abo_type = abonnements_types.id_abo_type) LEFT OUTER JOIN disciplines ON abonnements_types.id_discipline = disciplines.id_discipline;


Ca marche niquel :)


Message édité par Gat$ le 16-03-2005 à 00:50:08
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed