Requete Delete from

Grald -  
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
j'ai 2 table: table_1 (300000 enregistrements) et table_2 (3000 enregistrements). La table_2 étant les suppressions à faire dans la table_1.

TABLE_1
NOM1 NOM2 A B C

TABLE_2
NOM1 NOM2

J'essaye donc de créer une requête sql de suppression des enregistrements de la table 2 vers table 1 (ce qui permet d'identifier un enregistrement est Nom1 et Nom2)

J'ai essayé la fonction delete from mais je ne dois pas lui donner la bonne syntaxe car il me renvoi un message afin de lui donner une valeur à table_2
mon but n'est pas de donner une valeur de suppression mais que le delete se fasse automatiquement à partir de donner de la table_2
je ne sais pas si je suis très clair
D'avance merci

7 réponses

xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
Salut !

as-tu déjà testé le plus simple donc ce qui suit :

DELETE *
FROM TABLE_1
WHERE
TABLE1_NOM1=TABLE2_NOM1
and TABLE1_NOM2=TABLE2_NOM2

1
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
salut !

Bien sûr , tu as déjà fait une copie de sauvegarde
sur une base Excel ou autre ?

sql :
avec une sous-select du style :

delete ... where Table_1.nom1 in (select nom1 from Table_2)

tu effaces de table_1 lorsqu'il y a le même nom1 dans table_2
0
Grald
 
Merci pour ton aide

J'avais bien fiat une copie avant de me lancer dans de la suppression
Je n'ai plus de message d'erreur (c'est déjà super)....

Par contre il me supprime plus d'enregistrement. Ce qui identifie de maniere unique un enregistrement est = NOM1 + NOM2
Là Access me supprime tous les enregistrements où il trouve une correspondance entre:
TABLE_1.NOM1 ET TABLE_2.NOM1
OU
TABLE_1.NOM2 ET TABLE_2.NOM2

Voici les deux requêtes lancés; j'obtiens les même résultats (la 1er étant issu de l'aide de Xkristi)

DELETE *
FROM TABLE_1
WHERE NOM1 IN (SELECT NOM1 FROM TABLE_2) AND NOM2 IN (SELECT NOM2 FROM TABLE_2);

DELETE *
FROM TABLE_1
WHERE TABLE_1.NOM1 IN (SELECT TABLE_1.NOM1 FROM TABLE_1 INNER JOIN TABLE_2 ON (TABLE_2.NOM1 = TABLE_1.NOM1))
AND TABLE_1.NOM2 IN (SELECT TABLE_1.NOM2 FROM TABLE_1 INNER JOIN TABLE_2 ON (TABLE_2.NOM2 = TABLE_1.NOM2));
0
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
Salut !

Jer ne connais pas le SQL de Acces donc pas du tout sûre que cela fonctionne comme cela
mais j'aurais mis ça

DELETE *
FROM TABLE_1
WHERE NOM1 IN
(SELECT NOM1 FROM TABLE_2 WHERE
NOM2 IN (SELECT NOM2 FROM TABLE_1));

à tester ?????????
0
Grald
 
Désolé de n'avoir pu tester plus tôt

Mais cela ne marche pas non plus (même résultat = plus de suppression que prévu)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Grald
 
yes déjà tester mais il me demande une valeur à supprimé
0
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
connais pas Access
y a t-il un nom d'enregistrement ?
il ne supporte apparemment pas le *

désolée
0
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
delete TABLE_1.* à la place de * tout seul ?
0
Grald
 
C'est access qui me place * automatiquement même si je lui rentre le nom de table en 1er
0
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
Bonjour
je ne connais toujours pas Access mais j'ai pu voir
qu'il ne faut rien mettre entre delete et from
ce sarait directement delete from
et ta condition Where
0
Grald
 
J'ai eu la réponse sur un autre forum je te la donne pour info
DELETE from table1
WHERE EXISTS (SELECT NULL FROM table2 WHERE table2.nom1 = table1.nom1 AND table2.nom2 = table1.nom2)

En tous cas merci pour ton aide et le temps passé à me répondre
0
xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
 
salut Grald

et merci aussi à toi de nous avoir passé l'info

C'est sympa
0