abdeslam2009
Messages postés17Date d'inscriptionlundi 12 octobre 2009StatutMembreDernière intervention22 juillet 2011
-
12 oct. 2009 à 23:40
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 2012
-
14 oct. 2009 à 16:16
Salut
j'ai tenté de sélectionner plusieurs champs dans plusieurs tables(jointures) mais le problème que j'ai rencontré les lignes retournées sont doublées.
j'ai utilisé la fonction distinct mais toujours le meme problème aussi j'ai utilisé la fonction group by les lignes retourner ne sont pas doublées mais cette fois ici une colonne qui retourne doublé voilà la requête et les tables (elles sont en jointures) vous pouvez faire copier et coler les tables dans un editeurs puis executer la requête pour les choses être en calire:
--------------------ce code est bien testé chez moi----------
-- Structure de la table `article`
--
------------------la fin de cration des tables-------
---voilà la requete aussi il est testé chez moi------
select consultation_frs.consult_frs_id,consult_frs_art.article_id,
fournisseur.fournisseur_id,consultation_frs.consult_ach_id
,article.code_article as code_article,consult_frs_art.qte_consult as qte_consult ,nom_fournisseur,ref_consult,date_consult_frs,etat_consult_frs,mode_consult_frs from article,consult_frs_art,consultation_frs,fournisseur,consultation_achat where fournisseur.fournisseur_id=consultation_frs.fournisseur_id and consultation_achat.consult_ach_id=consult_frs_art.consult_ach_id and article.article_id=consult_frs_art.article_id and consultation_achat.consult_ach_id=consultation_frs.consult_ach_id
-------------------------la fin de la requete------
c'est urgant je veux savoir est ce qu'il ya une autre fonction spéciale sans distint qui êmpeche les lignes doublées car je trouve ça bizzar!!!
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 13 oct. 2009 à 07:53
Si tes lignes sont doublées c'est qu'il y a un souci de jointure. Remplace ton Select ... par Select * et vois l'élement qui change.
Ou alors regarde la commande Group by en SQL
S.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 13 oct. 2009 à 10:20
Salut,
Non, il n'y a pas de soucis de jointure. Jetez un oeil à la doc de MySQL sur les jointures, ce comportement est tout à fait normal.
Pour deux tables possédant respectivement x et y lignes, une jointure retournera x*y lignes, c'est à dire qu'elle fera correspondre chaque ligne d'une table à chaque ligne de l'autre.
Il faut utiliser la clause WHERE pour éliminer les lignes que l'on ne veut pas. Encore une fois, tout est dans la doc.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 13 oct. 2009 à 12:41
Comment filtres-tu des lignes doubles avec le Where ??
Pour en revenir au select * il est là pour te donner une piste de réflexion du 'Pourquoi j'en ai plusieurs..??'
Ton souci se situe sur la colonne consult_frs_id et ta table consultation_frs
S.
neigedhiver
Messages postés2480Date d'inscriptionjeudi 30 novembre 2006StatutMembreDernière intervention14 janvier 201119 13 oct. 2009 à 13:05
Le problème de faire des jointures, c'est qu'on obtient généralement des résultats inattendus quand on ne sait pas très précisément comment fonctionnent les jointures. Surtout quand celles-ci sont implicites.
Le mieux est encore de définir des jointures explicites (INNER JOIN, LEFT JOIN, STRAIGTH JOIN, etc) en fonction du résultat que l'on souhaite obtenir. Mais pour ça, il faut savoir précisément ce qu'on veut obtenir, ce qui implique d'être capable de reproduire manuellement (sur papier par exemple) la jointure que le SGBD va effectuer. Avancer au hasard en tatonnant ne donne jamais grand chose de vraiment positif : au final, ça peut marcher, mais on ne sait pas trop pourquoi, donc on ne pourra pas faire évoluer le code si besoin, sauf à tout recommencer, sans vraiment comprendre une fois de plus comment on va faire pour que ça fonctionne...
C'est que DBA, c'est un métier, et c'est pas le même que développeur, beaucoup de gens ont tendance à l'oublier.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 13 oct. 2009 à 13:59
Je suis d'accord avec toi pour les jointures, mais une fois maitrisée cette notion donne les résultat qu'on lui demande. J'avoue ma préférence pour les 'Join' aussi.
Donc pour en revenir à la problématique de notre ami je reste sur ma position, c'est le fait qu'il 3 lignes dans sa table qui 'triple' les lignes identiques.. qui par la clé 'consult_frs_id'.. ne sont pas identiques.
S.
syndrael
Messages postés2378Date d'inscriptionlundi 4 février 2002StatutMembreDernière intervention29 décembre 201220 14 oct. 2009 à 16:16
Biensur qu'elle est juste. C'est le contenu de ta table consultation_frs qui montre 3 entrée qui répondent à la jointure par leur clé.
Donc reprends ma requete et poursuis ton aventure trépidante dans MySQL
S.