OVH Cloud OVH Cloud

delete à partir d'une clé primaire

2 réponses
Avatar
Brett
Bonjour,=20

Petit probl=E8me SQL sous ACCESS :=20
Soit trois tables :=20
T1 Table principale=20
T2 Table d'enregistrements =E0 importer dans T1=20
T3 Table d'enregistrements en doublons dans T2 par rapport=20
=E0 T1=20

Les doublons sont d=E9termin=E9s =E0 partir d'une cl=E9 compos=E9e=20
de trois champs=20
numAct, numLieu, datAct.=20

Je veux supprimer les doublons de la T2.=20

J'ai b=E2ti une requ=EAte du style :=20

set dbBaseCourante =3D currentDB

strSQL =3D "DELETE T2.* FROM T2 WHERE (T2.numAct,=20
T2.numLieu, T2.datAct) in (SELECT numAct, numLieu, datAct=20
FROM T3);"=20
=20
dbBaseCourante.execute strSQL

Il n'aime pas les virgules dans ma clause WHERE.=20

Cette syntaxe est-elle correcte sous ACCESS ?

Sinon quelles solutions proposez-vous ?

Merci

2 réponses

Avatar
Aba
Votre syntaxe n'est pas correcte. Vous ne pouvez sélectionner qu'un champ
dans la clause IN;
Vous pouvez par contre utiliser la syntaxe suivante :
strSQL = "DELETE T2.* FROM T2 WHERE EXISTS (SELECT 1 FROM T3 WHERE
T2.numAct=T3.numAct AND T2numLieu=T3.numLieu AND T2.datAct=T3.datAct )"



"Brett" a écrit dans le message de
news:1f3a401c45792$26462730$
Bonjour,

Petit problème SQL sous ACCESS :
Soit trois tables :
T1 Table principale
T2 Table d'enregistrements à importer dans T1
T3 Table d'enregistrements en doublons dans T2 par rapport
à T1

Les doublons sont déterminés à partir d'une clé composée
de trois champs
numAct, numLieu, datAct.

Je veux supprimer les doublons de la T2.

J'ai bâti une requête du style :

set dbBaseCourante = currentDB

strSQL = "DELETE T2.* FROM T2 WHERE (T2.numAct,
T2.numLieu, T2.datAct) in (SELECT numAct, numLieu, datAct
FROM T3);"

dbBaseCourante.execute strSQL

Il n'aime pas les virgules dans ma clause WHERE.

Cette syntaxe est-elle correcte sous ACCESS ?

Sinon quelles solutions proposez-vous ?

Merci
Avatar
Brett
-----Message d'origine-----
Votre syntaxe n'est pas correcte. Vous ne pouvez
sélectionner qu'un champ

dans la clause IN;
Vous pouvez par contre utiliser la syntaxe suivante :
strSQL = "DELETE T2.* FROM T2 WHERE EXISTS (SELECT 1
FROM T3 WHERE

T2.numAct=T3.numAct AND T2numLieu=T3.numLieu AND
T2.datAct=T3.datAct )"


Génial c'est bon.

J'oublie toujours qu'existe EXISTS...
Merci beaucoup !!!