OVH Cloud OVH Cloud

Jointure

7 réponses
Avatar
Daniel Corréia
Bonjour,


Comment écrire une jointure entre deux tables A et B en utilisant par
exemple une colonne "Référence produit"
avec la particularité que ces colonnes peuvent contenir un caractère
générique (* dans mon cas)

EX :
TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
TableB avec 3 enregistrements contenant les références 'A9999999-0000**',
'A9999999-000011', 'A9999999-000022'

La jointure entre TableA et TableB doit remonter 3 lignes...


Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule ligne
remontée)...
tableA.ref like replace(tableB,'**','__')

ou

replace(tableA,'**','__') like replace(tableB,'**','__')
....



NB : Peu importe pour les perf...


merci d'avance

--
Daniel CORREIA

7 réponses

Avatar
Oliv'
SAlut,
Si tes champs son toujours de la même taille tu paux peut être utiliser un
left(tableA,13) like (left(tableB,13)

Oliv'
"Daniel Corréia" a écrit dans le message de news:
%23VTy%
Bonjour,


Comment écrire une jointure entre deux tables A et B en utilisant par
exemple une colonne "Référence produit"
avec la particularité que ces colonnes peuvent contenir un caractère
générique (* dans mon cas)

EX :
TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
TableB avec 3 enregistrements contenant les références 'A9999999-0000**',
'A9999999-000011', 'A9999999-000022'

La jointure entre TableA et TableB doit remonter 3 lignes...


Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule ligne
remontée)...
tableA.ref like replace(tableB,'**','__')

ou

replace(tableA,'**','__') like replace(tableB,'**','__')
....



NB : Peu importe pour les perf...


merci d'avance

--
Daniel CORREIA
Avatar
Daniel Corréia
Non hélas les longueurs des références sont différentes d'un produit à
l'autre.
De plus les * peuvent être placés à n'importe quel endroitdans la référence
(pas forcément à la fin)


"Oliv'" <(supprimerceci) a écrit dans le
message de news: 41add947$0$11925$
SAlut,
Si tes champs son toujours de la même taille tu paux peut être utiliser un
left(tableA,13) like (left(tableB,13)

Oliv'
"Daniel Corréia" a écrit dans le message de news:
%23VTy%
Bonjour,


Comment écrire une jointure entre deux tables A et B en utilisant par
exemple une colonne "Référence produit"
avec la particularité que ces colonnes peuvent contenir un caractère
générique (* dans mon cas)

EX :
TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
TableB avec 3 enregistrements contenant les références 'A9999999-0000**',
'A9999999-000011', 'A9999999-000022'

La jointure entre TableA et TableB doit remonter 3 lignes...


Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule


ligne
remontée)...
tableA.ref like replace(tableB,'**','__')

ou

replace(tableA,'**','__') like replace(tableB,'**','__')
....



NB : Peu importe pour les perf...


merci d'avance

--
Daniel CORREIA





Avatar
Patrice
A priori le LIKE n'est pas dans le bon sens (c'est b.ref qui doit-être
"like" a.ref). Si tu peux aussi faire le contraire, il faudra également
faire un OR pour tester l'autre sens...

Patrice

--

"Oliv'" <(supprimerceci) a écrit dans le
message de news:41add947$0$11925$
SAlut,
Si tes champs son toujours de la même taille tu paux peut être utiliser un
left(tableA,13) like (left(tableB,13)

Oliv'
"Daniel Corréia" a écrit dans le message de news:
%23VTy%
Bonjour,


Comment écrire une jointure entre deux tables A et B en utilisant par
exemple une colonne "Référence produit"
avec la particularité que ces colonnes peuvent contenir un caractère
générique (* dans mon cas)

EX :
TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
TableB avec 3 enregistrements contenant les références 'A9999999-0000**',
'A9999999-000011', 'A9999999-000022'

La jointure entre TableA et TableB doit remonter 3 lignes...


Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule


ligne
remontée)...
tableA.ref like replace(tableB,'**','__')

ou

replace(tableA,'**','__') like replace(tableB,'**','__')
....



NB : Peu importe pour les perf...


merci d'avance

--
Daniel CORREIA





Avatar
Daniel Corréia
J'avais essayé avant : dans ce cas cela ne retourne aucune ligne...





"Patrice" a écrit dans le message de news:
#
A priori le LIKE n'est pas dans le bon sens (c'est b.ref qui doit-être
"like" a.ref). Si tu peux aussi faire le contraire, il faudra également
faire un OR pour tester l'autre sens...

Patrice

--

"Oliv'" <(supprimerceci) a écrit dans le
message de news:41add947$0$11925$
> SAlut,
> Si tes champs son toujours de la même taille tu paux peut être utiliser


un
> left(tableA,13) like (left(tableB,13)
>
> Oliv'
> "Daniel Corréia" a écrit dans le message de news:
> %23VTy%
> Bonjour,
>
>
> Comment écrire une jointure entre deux tables A et B en utilisant par
> exemple une colonne "Référence produit"
> avec la particularité que ces colonnes peuvent contenir un caractère
> générique (* dans mon cas)
>
> EX :
> TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
> TableB avec 3 enregistrements contenant les références


'A9999999-0000**',
> 'A9999999-000011', 'A9999999-000022'
>
> La jointure entre TableA et TableB doit remonter 3 lignes...
>
>
> Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule
ligne
> remontée)...
> tableA.ref like replace(tableB,'**','__')
>
> ou
>
> replace(tableA,'**','__') like replace(tableB,'**','__')
> ....
>
>
>
> NB : Peu importe pour les perf...
>
>
> merci d'avance
>
> --
> Daniel CORREIA
>
>
>




Avatar
Steve Kass
Daniel,

Si vous voulez retrouver une ligne lors que les valeurs A.x et B.x
sont égales caractère par caractère, ou * est considerée égale à
n'importe quelle caractère:

where
tableA.ref like replace(tableB.ref,'*','_')
or
tableB.ref like replace(tableA.ref,'*','_').

Steve Kass
Drew University


Daniel Corréia wrote:

Bonjour,


Comment écrire une jointure entre deux tables A et B en utilisant par
exemple une colonne "Référence produit"
avec la particularité que ces colonnes peuvent contenir un caractère
générique (* dans mon cas)

EX :
TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
TableB avec 3 enregistrements contenant les références 'A9999999-0000**',
'A9999999-000011', 'A9999999-000022'

La jointure entre TableA et TableB doit remonter 3 lignes...


Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule ligne
remontée)...
tableA.ref like replace(tableB,'**','__')

ou

replace(tableA,'**','__') like replace(tableB,'**','__')
....



NB : Peu importe pour les perf...


merci d'avance

--
Daniel CORREIA






Avatar
Oliv'
Donc en fait les 2 derniers caractères sont à ignorer !

select left('A9999999-000011',(len('A9999999-000011')-2)) te donnes les
caractères - 2

donc
select * from tableA inner join tableB on left(tableA,(len(tableA)-2))
=left(tableb,(len(tableB)-2))

Dis moi si ca marche

Oliv'



"Daniel Corréia" a écrit dans le message de news:

Non hélas les longueurs des références sont différentes d'un produit à
l'autre.
De plus les * peuvent être placés à n'importe quel endroitdans la référence
(pas forcément à la fin)


"Oliv'" <(supprimerceci) a écrit dans le
message de news: 41add947$0$11925$
SAlut,
Si tes champs son toujours de la même taille tu paux peut être utiliser un
left(tableA,13) like (left(tableB,13)

Oliv'
"Daniel Corréia" a écrit dans le message de news:
%23VTy%
Bonjour,


Comment écrire une jointure entre deux tables A et B en utilisant par
exemple une colonne "Référence produit"
avec la particularité que ces colonnes peuvent contenir un caractère
générique (* dans mon cas)

EX :
TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
TableB avec 3 enregistrements contenant les références 'A9999999-0000**',
'A9999999-000011', 'A9999999-000022'

La jointure entre TableA et TableB doit remonter 3 lignes...


Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule


ligne
remontée)...
tableA.ref like replace(tableB,'**','__')

ou

replace(tableA,'**','__') like replace(tableB,'**','__')
....



NB : Peu importe pour les perf...


merci d'avance

--
Daniel CORREIA





Avatar
Patrice
Si cela ne marche toujours pas envoie la phrase exacte que tu testes.

Patrice

--

"Daniel Corréia" a écrit dans le message de
news:%
J'avais essayé avant : dans ce cas cela ne retourne aucune ligne...





"Patrice" a écrit dans le message de news:
#
> A priori le LIKE n'est pas dans le bon sens (c'est b.ref qui doit-être
> "like" a.ref). Si tu peux aussi faire le contraire, il faudra également
> faire un OR pour tester l'autre sens...
>
> Patrice
>
> --
>
> "Oliv'" <(supprimerceci) a écrit dans le
> message de news:41add947$0$11925$
> > SAlut,
> > Si tes champs son toujours de la même taille tu paux peut être


utiliser
un
> > left(tableA,13) like (left(tableB,13)
> >
> > Oliv'
> > "Daniel Corréia" a écrit dans le message de news:
> > %23VTy%
> > Bonjour,
> >
> >
> > Comment écrire une jointure entre deux tables A et B en utilisant par
> > exemple une colonne "Référence produit"
> > avec la particularité que ces colonnes peuvent contenir un caractère
> > générique (* dans mon cas)
> >
> > EX :
> > TableA avec 1 enregistrement contenant la référence 'A9999999-0000**'
> > TableB avec 3 enregistrements contenant les références
'A9999999-0000**',
> > 'A9999999-000011', 'A9999999-000022'
> >
> > La jointure entre TableA et TableB doit remonter 3 lignes...
> >
> >
> > Ai essayé de remplacer ** par __ mais cela ne fonctionne pas (1 seule
> ligne
> > remontée)...
> > tableA.ref like replace(tableB,'**','__')
> >
> > ou
> >
> > replace(tableA,'**','__') like replace(tableB,'**','__')
> > ....
> >
> >
> >
> > NB : Peu importe pour les perf...
> >
> >
> > merci d'avance
> >
> > --
> > Daniel CORREIA
> >
> >
> >
>
>