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

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [SQL] pb de selection...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[SQL] pb de selection...

n°1233151
benco2964
Posté le 28-10-2005 à 08:45:14  profilanswer
 

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 ;)

mood
Publicité
Posté le 28-10-2005 à 08:45:14  profilanswer
 

n°1233153
betsamee
Asterisk Zeperyl
Posté le 28-10-2005 à 08:48:37  profilanswer
 

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)

n°1233161
benco2964
Posté le 28-10-2005 à 08:59:13  profilanswer
 

et sa marche comment les left join ( j'en ai jamais utilizé, jdébute!!!) ???

n°1233169
betsamee
Asterisk Zeperyl
Posté le 28-10-2005 à 09:13:56  profilanswer
 

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

n°1233192
benco2964
Posté le 28-10-2005 à 09:54:35  profilanswer
 

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.

n°1233275
benco2964
Posté le 28-10-2005 à 11:04:49  profilanswer
 

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

n°1233285
benco2964
Posté le 28-10-2005 à 11:07:11  profilanswer
 

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

n°1233311
Beegee
Posté le 28-10-2005 à 11:23:57  profilanswer
 

Alors déjà, on va réécrire ta requête illisible :D
 

Code :
  1. SELECT com_cdeent.type_cde,
  2.        com_cdeent.no_cde,
  3.        com_cdeent.dte_cde,
  4.        bas_cli.rais_soc,
  5.        com_cdelig.design,
  6.        com_cdelig.dte_livrp,
  7.        com_cdelig.no_art,
  8.        com_cdelig.no_lieu,
  9.        com_cdelig.no_lig,
  10.        com_cdelig.prx_unit,
  11.        com_cdelig.qte_cde,
  12.        com_cdelig.qte_livr,
  13.        com_cdelig.tothtlig,
  14.        com_cderep.no_repres
  15. FROM   soc1_precix:informix.bas_cli bas_cli,
  16.        soc1_precix:informix.com_cdeent com_cdeent,
  17.        soc1_precix:informix.com_cdelig com_cdelig,
  18.        soc1_precix:informix.com_cderep com_cderep
  19. WHERE  com_cdeent.no_cli = bas_cli.no_cli
  20. AND    com_cdelig.no_cde = com_cdeent.no_cde
  21. AND    com_cderep.no_cde = com_cdeent.no_cde
  22. AND    ((com_cdeent.type_cde=?)
  23.         AND (com_cdelig.qte_cde<>com_cdelig.qte_livr)
  24.         AND (com_cdeent.etat_cde<>3
  25.              AND com_cdeent.etat_cde<>5
  26.              AND com_cdeent.etat_cde<>6)
  27.         AND (com_cdelig.etat_lig<>6)
  28.         OR (com_cdeent.type_cde=?)
  29.         AND (com_cdelig.qte_cde<>com_cdelig.qte_livr)
  30.         AND (com_cdeent.etat_cde<>3
  31.              AND com_cdeent.etat_cde<>5
  32.              AND com_cdeent.etat_cde<>6)
  33.         AND (com_cdelig.etat_lig<>6))
  34. ORDER BY com_cdeent.type_cde,
  35.          com_cdeent.dte_cde,
  36.          com_cdeent.no_cde;


 
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.

n°1233322
benco2964
Posté le 28-10-2005 à 11:34:04  profilanswer
 

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!!!!!!!

n°1233344
Beegee
Posté le 28-10-2005 à 11:59:26  profilanswer
 

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 :
  1. SELECT com_cdeent.type_cde,
  2.        com_cdeent.no_cde,
  3.        com_cdeent.dte_cde,
  4.        bas_cli.rais_soc,
  5.        com_cdelig.design,
  6.        com_cdelig.dte_livrp,
  7.        com_cdelig.no_art,
  8.        com_cdelig.no_lieu,
  9.        com_cdelig.no_lig,
  10.        com_cdelig.prx_unit,
  11.        com_cdelig.qte_cde,
  12.        com_cdelig.qte_livr,
  13.        com_cdelig.tothtlig,
  14.        com_cderep.no_repres
  15. FROM   soc1_precix:informix.bas_cli bas_cli,
  16.        soc1_precix:informix.com_cdeent com_cdeent,
  17.        soc1_precix:informix.com_cdelig com_cdelig
  18. LEFT JOIN soc1_precix:informix.com_cderep com_cderep ON com_cderep.no_cde = com_cdeent.no_cde
  19. WHERE  com_cdeent.no_cli = bas_cli.no_cli
  20. AND    com_cdelig.no_cde = com_cdeent.no_cde
  21. AND    ((com_cdeent.type_cde=?)
  22.         AND (com_cdelig.qte_cde<>com_cdelig.qte_livr)
  23.         AND (com_cdeent.etat_cde<>3
  24.              AND com_cdeent.etat_cde<>5
  25.              AND com_cdeent.etat_cde<>6)
  26.         AND (com_cdelig.etat_lig<>6)
  27.         OR (com_cdeent.type_cde=?)
  28.         AND (com_cdelig.qte_cde<>com_cdelig.qte_livr)
  29.         AND (com_cdeent.etat_cde<>3
  30.              AND com_cdeent.etat_cde<>5
  31.              AND com_cdeent.etat_cde<>6)
  32.         AND (com_cdelig.etat_lig<>6))
  33. ORDER BY com_cdeent.type_cde,
  34.          com_cdeent.dte_cde,
  35.          com_cdeent.no_cde;

mood
Publicité
Posté le 28-10-2005 à 11:59:26  profilanswer
 

n°1233429
benco2964
Posté le 28-10-2005 à 13:39:58  profilanswer
 

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?


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

  [SQL] pb de selection...

 

Sujets relatifs
[SQL] ALTER TABLE sur table liée ?? ou solution de contournement plz ?Arborescence en SQL
Mettre le nom d'une table en paramètre dans un script SqlQuestion Selection SQL
[mysql] pb de selection sql avec OR et AND[SQL] selection des donnees qui ne remplissent pas une condition
[PHP-SQL] selection aleatoire dans une bdd avec un where[SQL] Selection toutes les lignes en double...
Création d'un serveur SQL Server puis sélection ds groupe.Selection d'une fourchette de dates avec ORACLE et SQL en PH¨P4
Plus de sujets relatifs à : [SQL] pb de selection...


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