pb de selection... [SQL] - SQL/NoSQL - Programmation
Marsh Posté le 28-10-2005 à 08:48:37
sans avoir lu ton code je pense qu'un left join dans le from peut etre ton ami (au lieu de faire ta jointure dans le where)
Marsh Posté le 28-10-2005 à 08:59:13
et sa marche comment les left join ( j'en ai jamais utilizé, jdébute!!!) ???
Marsh Posté le 28-10-2005 à 09:13:56
select * from table1 left join table2 on table1.chp=table2.chp
selectionne tous les enregistrements de table1 + ceux de table2 correspondant au critere de jointure table1.chp=table2.chp
ce qui fait que les enregistrements de table1 n ayant pas de correpondance avec ceux de table2 apparaitront quand meme
Marsh Posté le 28-10-2005 à 09:54:35
Le pb c'est que je ne dois pas sélectionner qu'un seul champ. Et mes tables sont également issus d'un logiciel de gestion de prod. Je ne sais pas si cela à une quelconque influence...en tout cas, je n'ai pas réussi. Cela me renvoie un message d'erreur.
Marsh Posté le 28-10-2005 à 11:04:49
Reexplication! dsl de vous embéter encore!:s
La requete est donc exactement la suivante :
SELECT com_cdeent.type_cde, com_cdeent.no_cde, com_cdeent.dte_cde, bas_cli.rais_soc, com_cdelig.design, com_cdelig.dte_livrp, com_cdelig.no_art, com_cdelig.no_lieu, com_cdelig.no_lig, com_cdelig.prx_unit, com_cdelig.qte_cde, com_cdelig.qte_livr, com_cdelig.tothtlig, com_cderep.no_repres
FROM soc1_precix:informix.bas_cli bas_cli, soc1_precix:informix.com_cdeent com_cdeent, soc1_precix:informix.com_cdelig com_cdelig, soc1_precix:informix.com_cderep com_cderep
WHERE com_cdeent.no_cli = bas_cli.no_cli AND com_cdelig.no_cde = com_cdeent.no_cde AND com_cderep.no_cde = com_cdeent.no_cde AND ((com_cdeent.type_cde=?) AND (com_cdelig.qte_cde<>com_cdelig.qte_livr) AND (com_cdeent.etat_cde<>3 And com_cdeent.etat_cde<>5 And com_cdeent.etat_cde<>6) AND (com_cdelig.etat_lig<>6) OR (com_cdeent.type_cde=?) AND (com_cdelig.qte_cde<>com_cdelig.qte_livr) AND (com_cdeent.etat_cde<>3 And com_cdeent.etat_cde<>5 And com_cdeent.etat_cde<>6) AND (com_cdelig.etat_lig<>6))
ORDER BY com_cdeent.type_cde, com_cdeent.dte_cde, com_cdeent.no_cde
Le champ no_repres peut parfois etre vide. C'est cela qui cause le pb. Du coup, toutes les commandes dont le champ
Marsh Posté le 28-10-2005 à 11:07:11
dsl sa a beugué... je reprends :
Le champ no_repres peut parfois etre vide. C'est cela qui cause le pb. Du coup, toutes les commandes dont le champ no_repres est vide sont supprimées. Quelqu'un pourrait me réécrire le passage avec le left join si c'est la solution?parce que j'ai essayé et waloo sa marche pa pr moi!!!
il faut obtenir toutes les commandes, avec un représentant vide s'il el faut...merci
Marsh Posté le 28-10-2005 à 11:23:57
Alors déjà, on va réécrire ta requête illisible
Code :
|
Pour le OR, tu es sûr de ton coup ? (juste une vérification, pour savoir)
Je ne vois pas no_repres dans les jointures ... donc je vois pas ce qui peut poser problème.
Marsh Posté le 28-10-2005 à 11:34:04
En fait je suis parti d'un requete existante et que j'ai poussé plus loin. Et le OR y était déja. En fait, je crois que le OR intervient quand je met un critere sur le type de commande ( pour pouvoir restreindre le type de commande et pas toutes les avoir). C'est bien ça qui m'embete, c'est que je ne vois pas non + d'ou le pb vien!!!En fait, si je fais une requete sans la table com_cderep d'ou je tire le no_repres, j'ai toutes les commandes. Mais quand je fais la jointure entre cette table et la table com_cdeent au niveau de no_cde, c'est la que disparaisse certaines commandes...J'comprends pas!!! NEED HELP PLEASE!!!!!!!
Marsh Posté le 28-10-2005 à 11:59:26
Ben alors c'est la jointure sur no_cde qui pose le problème
Il doit y avoir des commandes dont le numéro n'est attaché à aucun représentant dans com_cderep.
Essaye ça :
Code :
|
Marsh Posté le 28-10-2005 à 13:39:58
arf! sa ne marche toujours pa.Enfin la, la requete ne veut meme pa se lancer. J'ai le droit à un message d'erreur : unknown error message -19819. Quelqu'un peut me dire pourquoi?
Marsh Posté le 28-10-2005 à 08:45:14
Salut à tous!
Voila mon pb. Ma requete SQL est la suivante :
SELECT com_cdeent.type_cde, com_cdeent.no_cde, com_cdeent.dte_cde, bas_cli.rais_soc, com_cderep.no_repres, com_cdelig.dte_livrp, com_cdelig.no_lieu, com_cdelig.no_art, com_cdelig.design, com_cdelig.qte_cde, com_cdelig.qte_livr, com_cdelig.prx_unit, (com_cdelig.qte_cde-com_cdelig.qte_livr)*prx_unit, ((com_cdelig.tothtlig*(com_cdelig.qte_cde-com_cdelig.qte_livr))/com_cdelig.qte_cde)
FROM bas_cli, com_cdeent, com_cdelig, com_cderep
WHERE com_cdeent.no_cli = bas_cli.no_cli AND com_cdelig.no_cde = com_cdeent.no_cde AND com_cdelig.no_cde = com_cderep.no_cde AND ((com_cdeent.type_cde=?) AND (com_cdeent.no_cli=bas_cli.no_cli) AND (com_cdeent.no_cde=com_cdelig.no_cde And com_cdeent.no_cde=com_cderep.no_cde And com_cdeent.no_cde=com_cderep.no_cde) AND (com_cdelig.qte_cde<>com_cdelig.qte_livr) AND (com_cdeent.etat_cde Not In (3,5,6)) AND (com_cdelig.etat_lig<>"6" ) OR (com_cdeent.type_cde=?) AND (com_cdeent.no_cli=bas_cli.no_cli) AND (com_cdeent.no_cde=com_cdelig.no_cde And com_cdeent.no_cde=com_cderep.no_cde And com_cdeent.no_cde=com_cderep.no_cde) AND (com_cdelig.qte_cde<>com_cdelig.qte_livr) AND (com_cdeent.etat_cde Not In (3,5,6)) AND (com_cdelig.etat_lig<>"6" ))
ORDER BY com_cdeent.type_cde, com_cdelig.dte_livrp, com_cdeent.no_cde, com_cdelig.no_lig
Le pb est le suivant : je souhaite au travers de cette requete faire afficher le nom des représentants. La requete m'affiche certaines commandes avec les représentants comme je le souhaite, mais seulement pour les commandes possédant un représentant!!!Or certaines commandes n'ont pas de représentants. Du coup, toutes ces commandes sont zappées par la requete et j'obtiens un résultat faux....Si quelqu'un pouvait me dire comment je peux obtenir toutes les commandes, en affichant un blanc dans la case représentant si la commande en question n'a pas de représentant, sa m'aiderai beaucoup!
Merci d'avance