Requête multi let join

Requête multi let join - SQL/NoSQL - Programmation

Marsh Posté le 03-04-2007 à 11:15:12    

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

Reply

Marsh Posté le 03-04-2007 à 11:15:12   

Reply

Marsh Posté le 03-04-2007 à 12:42:07    

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

Reply

Marsh Posté le 03-04-2007 à 12:42:43    

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)

Reply

Marsh Posté le 03-04-2007 à 13:36:52    

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
 

Reply

Marsh Posté le 03-04-2007 à 14:20:23    

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
Reply

Marsh Posté le 03-04-2007 à 15:37:10    

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
Reply

Marsh Posté le 03-04-2007 à 15:46:09    

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

Reply

Sujets relatifs:

Leave a Replay

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