probleme avec jointure sur 3 tables

probleme avec jointure sur 3 tables - SQL/NoSQL - Programmation

Marsh Posté le 11-07-2006 à 10:45:11    

Bonjour,
 
Je rencontre actuellement un probleme de jointure sur 3 tables :
 
J'ai 3 tables : Compterendus, contacts et utilisateurs.
Donc dans la table UTILISATEURS, je recupere l'id de l'utilisateur et le code representant de ce dernier (utilisateur_id, utilisateur_coderep)
Je recupere l'id et le code_representant de la table CONTACTS(CONTACT_ID, CONTACT_ID_USER) Je fais ensuite une jointure sur la table CONTACTS via CONTACT_ID_USER(qui est le code representant de l'utilisateur), donc CONTACT_ID_USER = utilisateur_coderep en gros.
là dessus, je joints la table COMPTERENDUS, l'id du compterendu a celui du contact.
 
La requete s'effectue bien mais le problème est qu'elle ne me sort pas les resultats attendus.
 
Mon attente serait : "Je souhaiterai voir tous les messages appartenant à un utilisateur dont le champ(COMPTERENDU_POSTE) est à 0 ou à 1"(cela pour voir si un compte rendu est posté ou en cours de postage).
 
Merci
 
P.S : Je ne sais pas si je m'exprime bien pour ma requete, un peu d'indulgence svp  :D


Message édité par krovomi le 11-07-2006 à 10:58:33
Reply

Marsh Posté le 11-07-2006 à 10:45:11   

Reply

Marsh Posté le 11-07-2006 à 10:47:11    

ce serait pas du luxe si tu postais la requete en question

Reply

Marsh Posté le 11-07-2006 à 10:57:51    

ah oui pardon :)
 
Je savais que j'avais oublié quelque chose :p
 
SELECT U.UTILISATEUR_ID, U.UTILISATEUR_CODEREP FROM UTILISATEURS as U LEFT JOIN UTILISATEURS as U ON U.UTILISATEUR_CODEREP=Co.CONTACT_ID_USER LEFT JOIN COMPTERENDUS AS C WHERE COMPTERENDU_ID=Co.CONTACT_ID ANS COMPTERENDU='0'
 
 
Petite precision : je suis sous MySQL.
 
le probleme aussi que j'ai et que je ne comprends pas est que dans mes resultats attendu il ne me sort pas le champ COMPTERENDU_POSTE(le fameu 0 dans cette requete.
 
Merci ;)

Reply

Marsh Posté le 11-07-2006 à 11:01:56    

en vrac :
tu as repete 2 fois UTILISATEURS as U au lien de CONTACTS dans ta premiere jointure
tu n'as pas de ON dans ta deuxieme jointure
tu as ecrit ANS au lien de AND
 
en gros ca m'ettoneras que cette requete t'ai rendu quelque chose

Reply

Marsh Posté le 11-07-2006 à 11:08:42    

bah je l'ai refaite, donc ce n'est pas un copier coller, je te la refais:
SELECT U.UTILISATEUR_ID, U.UTILISATEUR_CODEREP
FROM UTILISATEURS AS U
LEFT JOIN CONTACTS AS Co ON U.UTILISATEUR_CODEREP = Co.CONTACT_ID_USER
LEFT JOIN COMPTERENDUS AS C ON COMPTERENDU_ID = Co.CONTACT_ID
AND C.COMPTERENDU_POSTE = '0'
 
voilà c'est mieux comme ca :)
Bref, il me sort des rusultats comme cela :
 
 Textes complets    
UTILISATEUR_ID        UTILISATEUR_CODEREP
 1                             12
 1                             12
 1                             12
 1                             12
 1                             12
 1                             12
 
donc je pense qu'il faut que je fasse une sous-requete pour voir d'autres champs de la table COMPTERENDUS, non ?

Reply

Marsh Posté le 11-07-2006 à 11:12:35    

remplaces AND C.COMPTERENDU_POSTE = '0'  par WHERE C.COMPTERENDU_POSTE = '0'

Reply

Marsh Posté le 11-07-2006 à 11:16:13    

j'ai essayé et il ne me sort aucun resultat alors qu'il devrait m'en sortir 2

Reply

Marsh Posté le 11-07-2006 à 11:33:27    

krovomi a écrit :

donc je pense qu'il faut que je fasse une sous-requete pour voir d'autres champs de la table COMPTERENDUS, non ?


Non que tu mettes les champs dont tu as besoin dans le select [:mlc]
Attention comme tu as un left join, pour certains enregistrements ces champs seront nuls ...
 

betsamee a écrit :

remplaces AND C.COMPTERENDU_POSTE = '0'  par WHERE C.COMPTERENDU_POSTE = '0'


Du coup ça transforme le left outer en inner et ça marche plus :o
 

Reply

Marsh Posté le 11-07-2006 à 11:47:52    

oui c'est ce que j'ai lu sur la doc de mysql, en effet ca marche, merci ;)

Reply

Sujets relatifs:

Leave a Replay

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