OVH Cloud OVH Cloud

Requête de non correspondance multi champs

1 réponse
Avatar
Jean-Marc
Salut à tous,

Soit une table Contacts contenant, entre autre, les champs suivants :
Prénom, NomFamille et CodePostal
Soit une table Import contenant, entre autre, les champs suivants : FIRST,
LAST et ZIP

J'ai fait une fonction PourTri(X) qui enlève les caractères accentués et
autres points, virgules etc ... et qui met le résultat en minuscule.

Je cherche, sans y parvenir, à créer une requête qui me sortirait les
enregistrements de la table Import qui ne sont pas déjà dans la table
Contacts, mais suivant certains critères que voici :

Je veux donc comparer si PourTri([Contacts].[Prénom]) <>
PourTri([Import].[FIRST]) ET PourTri([Contacts].[NomFamille]) <>
PourTri([Import].[LAST]) ET Left([Contacts].[CodePostal];5) <>
([Import].[ZIP];5) et obtenir les enregistrements de la table [Import] qui
remplissent toutes ces conditions.

Quel est le SQL de cette requête ?

Merci de vos z'avis z'avisés,

Jean-Marc

1 réponse

Avatar
Jean-Marc
Après plusieurs essais infructueux, ce SQL fonctionne presque comme je
l'attend :

SELECT [Import].[Numéro], [Import].[FIRST], [Import].[MID], [Import].[LAST],
[Import].[ADDRESS1], [Import].[ADDRESS2], [Import].[CITY], [Import].[STATE],
[Import].[ZIP], [Import].[COUNTRY], [Import].[COMPANY], [Import].[POSITION],
[Import].[PHONE], [Import].[MAG_CODE], [Import].[EMAIL]
FROM Import LEFT JOIN Contacts ON
(left([Import].[ZIP],5)=left([Contacts].[CodePostal],5)) AND
(([Import].[LAST])=([Contacts].[NomFamille])) AND
(([Import].[FIRST])=([Contacts].[Prénom]))
WHERE ((([Contacts].[Prénom]) Is Null));

En effet, ce SQL prend bien les 5 premiers caractères du code postal et ne
tien pas compte de la casse (à ce propos, je ne sais pas pourquoi. Si qqn
peut me l'expliquer ...) donc Jean-François et jean-françois ne sortiront
pas dans la requête. Par contre je n'arrive pas à intégrer ma fonction
PourTri(x) afin que Jean-François et jean francois correspondent.

Comment dois-je faire ?
J'espère qu'on ne me répondra pas qu'il est impossible d'utiliser, dans une
requête, une fonction créée dans un module.
Si c'est le cas, je sais encore moins comment faire.

Merci de vos z'avis z'avisés,

Jean-Marc

"Jean-Marc" a écrit dans le message de
news:OFM$
Salut à tous,

Soit une table Contacts contenant, entre autre, les champs suivants :
Prénom, NomFamille et CodePostal
Soit une table Import contenant, entre autre, les champs suivants : FIRST,
LAST et ZIP

J'ai fait une fonction PourTri(X) qui enlève les caractères accentués et
autres points, virgules etc ... et qui met le résultat en minuscule.

Je cherche, sans y parvenir, à créer une requête qui me sortirait les
enregistrements de la table Import qui ne sont pas déjà dans la table
Contacts, mais suivant certains critères que voici :

Je veux donc comparer si PourTri([Contacts].[Prénom]) <>
PourTri([Import].[FIRST]) ET PourTri([Contacts].[NomFamille]) <>
PourTri([Import].[LAST]) ET Left([Contacts].[CodePostal];5) <>
([Import].[ZIP];5) et obtenir les enregistrements de la table [Import] qui
remplissent toutes ces conditions.

Quel est le SQL de cette requête ?

Merci de vos z'avis z'avisés,

Jean-Marc