Recherche "doublon" dans plusieurs champs de le Table A en fonction d'une liste de mot dans un champ dans une table B

Le
La Norme Française c'est pas le FN
Bonjour,

je me casse la tête pour trover un moyen d'extraire des données.

Exemple :

Table A
-
Index Champs_1 Champs_2 Champs_3
1 AA1 AA3 AA6
2 BB3 AA7 AA34
3 EE5 RET2 YPO8
4 RET3 YY2 YP5
5 YY1 YP08 RRT12
6 YZA5 EEE5 EEE6
7 RRE5 EEE6 EEE9
8 TTR9 YY2 YP07


Table B
-
Champs_1
AA3
EE5
RET


En gros, je cherche à extraire de la table A chaque fiche en fonction
de la Table B

Résultat d'une requête basé sur Table B Champs_1:
Index Champs_1 Champs_2 Champs_3
1 AA1 AA3 AA6 (<--AA3)
2 BB3 AA7 AA34 (<--AA3)
3 EE5 RET2 YPO8 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
6 YZA5 EEE5 EEE6 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
4 RET3 YY2 YP5 (<--RET)

(Je crois pas en avoir oublié)

- Dans le résultat, il me faut les doublons aussi.
- Le champs index n'est pas un index mais juste une copie du champs
index de la table A (qui lui est indexé)
- La recherhce n'est pas strict mais "Contenant"


Si vous avez une piste en SQL, je suis preneur

Merci de votre aide.

PS :Maintenant que je suis plus devant la machine je me pose la
question si je dois pas lier TableB/Champs_1 aux 3 Champs de la Table
A.




--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
db
Le #26361603
Le 28/07/2015 18:20, La Norme Française c'est pas le FN a écrit :
Bonjour,

je me casse la tête pour trover un moyen d'extraire des données.
Résultat d'une requête basé sur Table B Champs_1:
Index Champs_1 Champs_2 Champs_3
1 AA1 AA3 AA6 (<--AA3)
2 BB3 AA7 AA34 (<--AA3)
3 EE5 RET2 YPO8 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
6 YZA5 EEE5 EEE6 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
4 RET3 YY2 YP5 (<--RET)




Bonsoir,

Quelque chose comme :

SELECT index, tA.champs1, tA.champs2, tA.champs3
from tB inner join tA on tA.champs1 like "*" & tB.champs1 & "*"
union all
SELECT index, tA.champs1, tA.champs2, tA.champs3
from tB inner join tA on tA.champs2 like "*" & tB.champs1 & "*"
union all
SELECT index, tA.champs1, tA.champs2, tA.champs3
from tB inner join tA on tA.champs3 like "*" & tB.champs1 & "*"



db
Jose Muller
Le #26361667
Le mardi 28 juillet 2015 18:20:52 UTC+2, La Norme Française c'est pas le FN a écrit :
Bonjour,

je me casse la tête pour trover un moyen d'extraire des données.

Exemple :

Table A
-------
Index Champs_1 Champs_2 Champs_3
1 AA1 AA3 AA6
2 BB3 AA7 AA34
3 EE5 RET2 YPO8
4 RET3 YY2 YP5
5 YY1 YP08 RRT12
6 YZA5 EEE5 EEE6
7 RRE5 EEE6 EEE9
8 TTR9 YY2 YP07


Table B
-------
Champs_1
AA3
EE5
RET


En gros, je cherche à extraire de la table A chaque fiche en fonction
de la Table B

Résultat d'une requête basé sur Table B Champs_1:
Index Champs_1 Champs_2 Champs_3
1 AA1 AA3 AA6 (<--AA3)
2 BB3 AA7 AA34 (<--AA3)
3 EE5 RET2 YPO8 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
6 YZA5 EEE5 EEE6 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
4 RET3 YY2 YP5 (<--RET)

(Je crois pas en avoir oublié)

- Dans le résultat, il me faut les doublons aussi.
- Le champs index n'est pas un index mais juste une copie du champs
index de la table A (qui lui est indexé)
- La recherhce n'est pas strict mais "Contenant"


Si vous avez une piste en SQL, je suis preneur

Merci de votre aide.

PS :Maintenant que je suis plus devant la machine je me pose la
question si je dois pas lier TableB/Champs_1 aux 3 Champs de la Table
A.




--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme




SQL_Text = "INSERT INTO FICHIERTMP " _
& "SELECT Index , [NUMERO DE DOSSIER] , [NOM DU CHEF] " _
& "FROM [FICHIER SOCIAL] " _
& "WHERE [NUMERO DE DOSSIER] in ( " _
& "SELECT [NUMERO DE DOSSIER] " _
& "FROM [FICHIER SOCIAL] " _
& "GROUP BY [NUMERO DE DOSSIER] " _
& "HAVING count([NUMERO DE DOSSIER])<>1) ;"
'

DoCmd.RunSQL SQL_Text
La Norme Française c'est pas le FN
Le #26361692
On Tue, 28 Jul 2015 19:04:57 +0200, db wrote:

Le 28/07/2015 18:20, La Norme Française c'est pas le FN a écrit :
Bonjour,

je me casse la tête pour trover un moyen d'extraire des données.
Résultat d'une requête basé sur Table B Champs_1:
Index Champs_1 Champs_2 Champs_3
1 AA1 AA3 AA6 (<--AA3)
2 BB3 AA7 AA34 (<--AA3)
3 EE5 RET2 YPO8 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
6 YZA5 EEE5 EEE6 (<--EE5)
3 EE5 RET2 YPO8 (<--RET)
4 RET3 YY2 YP5 (<--RET)




Bonsoir,

Quelque chose comme :

SELECT index, tA.champs1, tA.champs2, tA.champs3
from tB inner join tA on tA.champs1 like "*" & tB.champs1 & "*"
union all
SELECT index, tA.champs1, tA.champs2, tA.champs3
from tB inner join tA on tA.champs2 like "*" & tB.champs1 & "*"
union all
SELECT index, tA.champs1, tA.champs2, tA.champs3
from tB inner join tA on tA.champs3 like "*" & tB.champs1 & "*"



db



Merci, j'ai essayé (en essayent d'adapter) mais avec les subtilitées
de "inner join" j'ai pas réussi. J'ai droit à un joli message de
Access mais il est pas très locace.


Par contre ça m'a inspiré pour ça qui fonctionne :

SELECT Table1.Champs1, Table1.Champs2, Table1.Champs3
FROM Table1, Table2
WHERE (((Table1.Champs1) Like '*' & Table2.Liste1 & "*")) Or
(((Table1.Champs2) Like '*' & Table2.Liste1 & "*")) Or
(((Table1.Champs3) Like '*' & Table2.Liste1 & "*"));


Par contre, je sais pas si c'est normal, mais j'ai mis ça dans une
requete, et ça prend des plombes. J'ai 2 tables de près de 200.000
lignes pour la table A et 100.000 pour la Table B !!!

Je me doute bien que ça fait du monde, mais le problème c'est que pas
moyen de mettre un progress bar.
Je vais poser la question dans un nouveau thread.

--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
La Norme Française c'est pas le FN
Le #26361691
On Wed, 29 Jul 2015 04:45:56 -0700 (PDT), Jose Muller


SQL_Text = "INSERT INTO FICHIERTMP " _
& "SELECT Index , [NUMERO DE DOSSIER] , [NOM DU CHEF] " _
& "FROM [FICHIER SOCIAL] " _
& "WHERE [NUMERO DE DOSSIER] in ( " _
& "SELECT [NUMERO DE DOSSIER] " _
& "FROM [FICHIER SOCIAL] " _
& "GROUP BY [NUMERO DE DOSSIER] " _
& "HAVING count([NUMERO DE DOSSIER])<>1) ;"
'

DoCmd.RunSQL SQL_Text



Ok, merci, je vais tester demais.

Pour info, j'ai essayé ça et ça met des plombes (voir message
précédent)

Il y a un paquet de données à traiter et je n'ai jamais eu besoin
d'optimiser

J'ai essayé de mettre un progressbar pour au moins afficher
l'avancement, mais ça ne fonctionne pas.

J'ai placé dans un formulaire un bouton et un activeX progressbar mais
en faisant du pas à pas avec le débugger ça moulinne grave sans me
rendre la mains pendant au moins une heure quand ça en vient à cette
ligne (Même CTRL+pause ne fonctionne pas) :

MaRequete = "SELECT Table1.Champs1, Table1.Champs2, Table1.Champs3
FROM Table1, Table2
WHERE (((Table1.Champs1) Like """"'*'"""" & Table2.Liste1 &
""""*"""")) Or (((Table1.Champs2) Like """"'*'"""" & Table2.Liste1 &
""""*"""")) Or (((Table1.Champs3) Like """"'*'"""" & Table2.Liste1 &
""""*""""));"

Pour info, je viens de rajouter les " à l'instant, j'en ai peut être
mis de trop mais le code que j'ai fais ce matin est bon dans le VBA.



--
« le politiquement correct ne proclame pas la tolérance ; il ne fait qu'organiser la haine. » (Jacques Barzun)
C'est une doctrine obligatoire, qui n'est en réalité que l'expression la plus autoritaire du conformisme
Publicité
Poster une réponse
Anonyme