Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1780 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête multi let join

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Requête multi let join

n°1537680
benjones
Posté le 03-04-2007 à 11:15:12  profilanswer
 

Bonjour, je souhaire récupérer des infos dans plusieurs tables, cependant, certaines dépendances peuvent être nulles car il s'agit de valeurs facultatives.
Or, comment récupérer les lignes en question, même si une donnée est nulle ?
 
J'ai fait un left join, cependant, ça ne me donne pas le résultat escompté. En effet, si un élement est null, tous les autres contenu dans le left join le sont. voici la requete :
 

Code :
  1. select echeancier.echeances_facultatives.id_echeance as id_echeance,
  2. echeancier.echeances_facultatives.date as date,
  3. echeancier.nature.texte as nature,
  4. echeancier.contribution.texte as contribution,
  5. echeancier.organisme.texte as organisme,
  6. echeancier.echeances_facultatives.etat as etat,
  7. echeancier.echeances_facultatives.libelle as libelle,
  8. echeancier.type.texte as type,
  9. echeancier.echeances_facultatives.reglement as reglement,
  10. echeancier.echeances_facultatives.declaration as declaration
  11. from echeancier.echeances_facultatives
  12. left join (echeancier.contribution, echeancier.organisme, echeancier.type, echeancier.nature)
  13. on (echeancier.echeances_facultatives.id_contribution = echeancier.contribution.id_contribution
  14. and echeancier.echeances_facultatives.id_organisme = echeancier.organisme.id_organisme
  15. and echeancier.echeances_facultatives.id_type = echeancier.type.id_type
  16. and echeancier.echeances_facultatives.id_nature = echeancier.nature.id_nature)
  17. where echeancier.echeances_facultatives.id_echeance in (1,2,3,5,6,8,9,10,11,12,13,14,16,7,15)
  18. and echeancier.echeances_facultatives.date between '0401' and '0430'
  19. order by echeancier.echeances_facultatives.date,echeancier.echeances_facultatives.id_type

mood
Publicité
Posté le 03-04-2007 à 11:15:12  profilanswer
 

n°1537769
MagicBuzz
Posté le 03-04-2007 à 12:42:07  profilanswer
 

and (echeancier.echeances_facultatives.date between '0401' and '0430' or echeancier.echeances_facultatives.date is null)

n°1537770
MagicBuzz
Posté le 03-04-2007 à 12:42:43  profilanswer
 

et
 
where (echeancier.echeances_facultatives.id_echeance in (1,2,3,5,6,8,9,10,11,12,13,14,16,7,15) or echeancier.echeances_facultatives.id_echeance is null)

n°1537792
benjones
Posté le 03-04-2007 à 13:36:52  profilanswer
 

Merci pour ton aide MagicBuzz, cependant, echeancier.echeances_facultatives.date et echeancier.echeances_facultatives.id_echeance ne sont jamais nuls. En fait, la table echeancier.echeances_facultatives a été rempli avec des id = 0 pour id_contribution, id_organisme, id_nature lorsque qu'il n'y a pas de valeur entrée afin que les champs ne soient pas nuls mais ne correspondent pas avec un id existant (allant de 1 à n). Est-ce la cause du problème ?
 
Merci
 

n°1537822
MagicBuzz
Posté le 03-04-2007 à 14:20:23  profilanswer
 

ben donc au lieu de "is null" tu met "= 0"
 
ps : à noter que votre solution n'est pas terrible, dans la mesure où vous ne pourrez pas bénéficier des contraintes d'intégrités entre les deux tables. il faut mieux accepter les valeurs nulles, et mettre une contrainte FK entre les deux tables.


Message édité par MagicBuzz le 03-04-2007 à 14:21:39
n°1537913
benjones
Posté le 03-04-2007 à 15:37:10  profilanswer
 

Solution trouvée !!

Code :
  1. select
  2.            echeancier.echeances_facultatives.id_echeance as id_echeance,
  3.            echeancier.echeances_facultatives.date as date,
  4.            echeancier.nature.texte as nature,
  5.            echeancier.contribution.texte as contribution,
  6.            echeancier.organisme.texte as organisme,
  7.            echeancier.echeances_facultatives.etat as etat,
  8.            echeancier.echeances_facultatives.libelle as libelle,
  9.            echeancier.type.texte as type,
  10.            echeancier.echeances_facultatives.reglement as reglement,
  11.            echeancier.echeances_facultatives.declaration as declaration
  12.            from
  13.            echeancier.type, echeancier.echeances_facultatives
  14.            left join
  15.            echeancier.contribution
  16.            on
  17.            echeancier.echeances_facultatives.id_contribution = echeancier.contribution.id_contribution
  18.            left join
  19.            echeancier.organisme
  20.            on
  21.            echeancier.echeances_facultatives.id_organisme = echeancier.organisme.id_organisme
  22.            left join
  23.            echeancier.nature
  24.            on
  25.            echeancier.echeances_facultatives.id_nature = echeancier.nature.id_nature
  26.            where echeancier.echeances_facultatives.id_echeance in ({$ids_echeances_facultatives})
  27.            and echeancier.echeances_facultatives.id_type = echeancier.type.id_type


 
Merci pour ton aide.


Message édité par benjones le 03-04-2007 à 15:37:53
n°1537922
MagicBuzz
Posté le 03-04-2007 à 15:46:09  profilanswer
 

pourquoi t'as 25 left join maintenant :??:


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  Requête multi let join

 

Sujets relatifs
Requête mysql marche sauf pour une condition ....Requête SQL pour modifier une partie d'une valeur d'un champ
Passage d'une requête en paramètre[PHP] Votre avis sur ma requete
[PHP] Requete et SQLMulti Requete Ajax
Cherche Script php associé à une requete cronrequete sql et variable
emettre un son ? apres une requete 
Plus de sujets relatifs à : Requête multi let join


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR