Je galère sur une jointure

Répondre
Fredo5880
le 22/02/2012 à 09:51
Fredo5880
Bonjour à tous !

Là je galère sur une jointure, j'ai du zapper un truc et ça me rend fou !

Explication :
2 tables

Une avec des "articles", l'autre avec les coloris dispos (en général).

Table synchro_articles

id_article
id_produit
reference_article
reference_produit
grille_coloris
valeur_coloris
grille_taille
valeur_taille

Table synchro_coloris

COLORISL_NOCOLORIS
COLORISL_REFC
COLORISL_LIB20
COLORISL_GCOLORIS


Le but est de recuperer le libellé (COLORISL_LIB20) en fonction de la grille et de la valeur du coloris indiqués dans la table synchro_articles

Les champs n'ont pas les memes noms car je synchronise 2 systemes totalement différents.

Actuellement j'ai ecris cette fonction :

SELECT DISTINCT `synchro_articles`.`grille_coloris`, `synchro_articles`.`valeur_coloris`,`synchro_coloris`.`COLORISL_LIB20`
FROM `synchro_articles` UNION JOIN `synchro_coloris`
ON `synchro_articles`.`grille_coloris` != ''
OR `synchro_articles`.`valeur_coloris` != ''
AND `synchro_coloris`.`COLORISL_REFC`=`synchro_articles`.`valeur_coloris`
AND `synchro_coloris`.`COLORISL_GCOLORIS`=`synchro_articles`.`grille_coloris`

Mais je recupere enormement d'enregistrement car il duplique chaque couple grille_coloris et valeur_coloris pour m'afficher toutes les possibilités de libellés (colorisl_lib20).

Si quelqu'un a une idée je suis preneur !

Merci d'avance !
Fred
Fredo5880
le 22/02/2012 à 09:52
Fredo5880
Erreur de frappe, ce n'est pas UNION JOIN, mais LEFT JOIN (j'avais fais un essai)

SELECT DISTINCT `synchro_articles`.`grille_coloris`, `synchro_articles`.`valeur_coloris`,`synchro_coloris`.`COLORISL_LIB20`
FROM `synchro_articles` LEFT JOIN `synchro_coloris`
ON `synchro_articles`.`grille_coloris` != ''
OR `synchro_articles`.`valeur_coloris` != ''
AND `synchro_coloris`.`COLORISL_REFC`=`synchro_articles`.`valeur_coloris`
AND `synchro_coloris`.`COLORISL_GCOLORIS`=`synchro_articles`.`grille_coloris`
Fred
moogli
le 22/02/2012 à 21:42
moogli
salut,

la syntaxe n'est pas bonne.

une jointure c'est sur une "référence", c'est a dire qu'il faut un lien entre les tables hors la y en a deux (a priori
AND `synchro_coloris`.`COLORISL_REFC`=`synchro_articles`.`valeur_coloris`
AND `synchro_coloris`.`COLORISL_GCOLORIS`=`synchro_articles`.`grille_coloris`)

ce n'est pas clair.

Je pense que tu a un défaut de conception de tes tables.

la pour le coup une requête sur les deux tables serait une solution.

SELECT DISTINCT synchro_articles.grille_coloris, synchro_articles.valeur_coloris,synchro_coloris.COLORISL_LIB20
FROM synchro_articles, synchro_coloris
where synchro_articles.grille_coloris != ''
OR synchro_articles.valeur_coloris != ''
AND synchro_coloris.COLORISL_REFC=synchro_articles.valeur_coloris
AND synchro_coloris.COLORISL_GCOLORIS=synchro_articles.grille_coloris


@+
Il en faut peu pour être heureux !!!!!
Fredo5880
le 23/02/2012 à 09:02
Fredo5880
Salut et merci pour ta réponse,


effectivement il y a des gros défaut dans les tables des grilles de couleurs, mais là je ne suis pas à la base de la création, c'est la société qui a développé l'ERP avec des gants de boxe !

Je vais devoir ruser pour reussir à faire des bases temp et peut-être y arriver !

Merci pour ton aide en tout cas !
Fred
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours