Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Requete SQL d'exclusion

4 réponses
Avatar
Fdecourt
Bonjour,

J'ai une requ=EAte SQL qui me sort toutes les valeurs d'une table qui
n'ont pas de correspondance dans une autre :

SELECT distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=3DA.Champ1) AND (B.LIFNR=3DA.Champ2) AND
(B.BANKS=3DA.Champ7) AND (B.BANKL=3DA.Champ8) AND (B.BANKN=3DA.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#

Ce qui fonctionne tr=E8s bien.

Le Champ2 est un identifiant, qui est forc=E9ment pr=E9sent dans les deux
tables, et n'est pas unique.

Ainsi en fonction des crit=E8res, cette requ=EAte me sort bien une liste
de tous les identifiants pour lesquels la combinaison de plusieurs
champs n'a pas =E9t=E9 trouv=E9 dans la table SAP.

Maintenant ce dont j'ai besoin, c'est que pour chaque identifiant de
cette liste, je r=E9cup=E8re les information qui se trouvent dans la table
SAP.

Merci pour votre aide.

F.

4 réponses

Avatar
Sylvain Lafontaine
Vous devez utiliser une sous-requête, comme par exemple en utilisant
l'opérateur IN:

Select * from SAP s1 where s1.LIFNR
IN
(
SELECT distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=A.Champ1) AND (B.LIFNR=A.Champ2) AND
(B.BANKS=A.Champ7) AND (B.BANKL=A.Champ8) AND (B.BANKN=A.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#
And a.Champ2 is not Null
)

La syntaxe d'Access pour les sous-requêtes étant un peu particulière; je ne
sais pas ci l'exemple ci-haut va fonctionner tel que. J'ai également
rajouter le test « a.Champ2 is not Null » car c'est important de ne pas
avoir de valeur nulle dans la liste retournée pour l'opérateur IN.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.)
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Fdecourt" wrote in message
news:
Bonjour,

J'ai une requête SQL qui me sort toutes les valeurs d'une table qui
n'ont pas de correspondance dans une autre :

SELECT distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=A.Champ1) AND (B.LIFNR=A.Champ2) AND
(B.BANKS=A.Champ7) AND (B.BANKL=A.Champ8) AND (B.BANKN=A.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#

Ce qui fonctionne très bien.

Le Champ2 est un identifiant, qui est forcément présent dans les deux
tables, et n'est pas unique.

Ainsi en fonction des critères, cette requête me sort bien une liste
de tous les identifiants pour lesquels la combinaison de plusieurs
champs n'a pas été trouvé dans la table SAP.

Maintenant ce dont j'ai besoin, c'est que pour chaque identifiant de
cette liste, je récupère les information qui se trouvent dans la table
SAP.

Merci pour votre aide.

F.
Avatar
Fdecourt
Bonjour,

Merci beaucoup, et cela fonctionne sous Access.
Par contre c'est extrement long (les deux table font 25 000 lignes
environ.

Et est-il possible de faire une selection sur deux champs.
IL peux y avoir plusieurs lignes pour le même LIFNR. Cependant seule
une seule de toutes ces lignes peut ne pas être présente dans la table
TBL1, et ce sont ces valeurs que je souhaite faire remonter, or dans
ce cas, il me prend la première qu'il trouve (ce qui est logique).

Merci pour votre aide

Cordialement,

F.

SAuf que en faisant ça

On Jul 7, 7:19 pm, "Sylvain Lafontaine"
wrote:
Vous devez utiliser une sous-requête, comme par exemple en utilisant
l'opérateur IN:

Select * from SAP s1 where s1.LIFNR
IN
(
SELECT  distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=A.Champ1) AND (B.LIFNR=A.Champ2) AND
(B.BANKS=A.Champ7) AND (B.BANKL=A.Champ8) AND (B.BANKN=A.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#
    And a.Champ2 is not Null
)

La syntaxe d'Access pour les sous-requêtes étant un peu particulièr e; je ne
sais pas ci l'exemple ci-haut va fonctionner tel que.  J'ai également
rajouter le test « a.Champ2 is not Null » car c'est important de ne p as
avoir de valeur nulle dans la liste retournée pour l'opérateur IN.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.)
Consultant indépendant et programmation à distance pour Access et
SQL-Server.

"Fdecourt" wrote in message

news:
Bonjour,

J'ai une requête SQL qui me sort toutes les valeurs d'une table qui
n'ont pas de correspondance dans une autre :

SELECT  distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=A.Champ1) AND (B.LIFNR=A.Champ2) AND
(B.BANKS=A.Champ7) AND (B.BANKL=A.Champ8) AND (B.BANKN=A.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#

Ce qui fonctionne très bien.

Le Champ2 est un identifiant, qui est forcément présent dans les deux
tables, et n'est pas unique.

Ainsi en fonction des critères, cette requête me sort bien une liste
de tous les identifiants pour lesquels la combinaison de plusieurs
champs n'a pas été trouvé dans la table SAP.

Maintenant ce dont j'ai besoin, c'est que pour chaque identifiant de
cette liste, je récupère les information qui se trouvent dans la tabl e
SAP.

Merci pour votre aide.

F.


Avatar
Sylvain Lafontaine
Attendez-vous pas à avoir des excès de vitesse avec Access; surtout
lorsqu'il est difficile ou impossible pour JET d'utiliser des indexes comme
dans ce cas-ci. Si vous voulez résoudre votre problème de vitesse, vous
allez devoir passer sur SQL-Server et être sûr que la requête s'effectue en
entier sur ce dernier.

Quand à votre deuxième question, je ne la comprends pas: si la ligne
n'existe pas dans la table SAP, comment pouvez-vous faire remonter ses
valeurs???

Pour le reste, si vous désirez reposer votre question, vous devriez fournir
un exemple des données (sous la forme d'INSERT avec le schéma correspondant
pour les tables) dans leur état le plus simple permettant de reproduire
votre problème.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.)
Consultant indépendant et programmation à distance pour Access et
SQL-Server.


"Fdecourt" wrote in message
news:
Bonjour,

Merci beaucoup, et cela fonctionne sous Access.
Par contre c'est extrement long (les deux table font 25 000 lignes
environ.

Et est-il possible de faire une selection sur deux champs.
IL peux y avoir plusieurs lignes pour le même LIFNR. Cependant seule
une seule de toutes ces lignes peut ne pas être présente dans la table
TBL1, et ce sont ces valeurs que je souhaite faire remonter, or dans
ce cas, il me prend la première qu'il trouve (ce qui est logique).

Merci pour votre aide

Cordialement,

F.

SAuf que en faisant ça

On Jul 7, 7:19 pm, "Sylvain Lafontaine"
wrote:
Vous devez utiliser une sous-requête, comme par exemple en utilisant
l'opérateur IN:

Select * from SAP s1 where s1.LIFNR
IN
(
SELECT distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=A.Champ1) AND (B.LIFNR=A.Champ2) AND
(B.BANKS=A.Champ7) AND (B.BANKL=A.Champ8) AND (B.BANKN=A.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#
And a.Champ2 is not Null
)

La syntaxe d'Access pour les sous-requêtes étant un peu particulière; je
ne
sais pas ci l'exemple ci-haut va fonctionner tel que. J'ai également
rajouter le test « a.Champ2 is not Null » car c'est important de ne pas
avoir de valeur nulle dans la liste retournée pour l'opérateur IN.

--
Sylvain Lafontaine, ing.
MVP pour « Windows Live Platform »
Courriel: sylvain2009 sylvainlafontaine com (remplissez les blancs, svp.)
Consultant indépendant et programmation à distance pour Access et
SQL-Server.

"Fdecourt" wrote in message

news:
Bonjour,

J'ai une requête SQL qui me sort toutes les valeurs d'une table qui
n'ont pas de correspondance dans une autre :

SELECT distinct a.Champ2
FROM TBL1 AS A
LEFT JOIN SAP AS B ON (B.BUKRS=A.Champ1) AND (B.LIFNR=A.Champ2) AND
(B.BANKS=A.Champ7) AND (B.BANKL=A.Champ8) AND (B.BANKN=A.Champ9)
WHERE B.LIFNR IS NULL and a.Champ12<#23/06/2009#

Ce qui fonctionne très bien.

Le Champ2 est un identifiant, qui est forcément présent dans les deux
tables, et n'est pas unique.

Ainsi en fonction des critères, cette requête me sort bien une liste
de tous les identifiants pour lesquels la combinaison de plusieurs
champs n'a pas été trouvé dans la table SAP.

Maintenant ce dont j'ai besoin, c'est que pour chaque identifiant de
cette liste, je récupère les information qui se trouvent dans la table
SAP.

Merci pour votre aide.

F.


Avatar
Fdecourt
Bonjour Sylvain,

Merci pour votre réponse.

J'ai laissé tourner la requête pendant trois heures, puis j'ai laissé
tombé et suis passé intégralement par Excel pour au final obtenir le
résultat que je souhaitais.

Merci de vous être penché sur le sujet.

Cordialement,

F.