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
Configuration: Windows XP
Internet Explorer 7.0

7 réponses

  1. 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
  2. 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
  3. 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
    1. 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
  4. 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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Grald
     
    yes déjà tester mais il me demande une valeur à supprimé
    0
    1. 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
    2. xkristi Messages postés 4336 Date d'inscription   Statut Membre Dernière intervention   564
       
      delete TABLE_1.* à la place de * tout seul ?
      0
  7. Grald
     
    C'est access qui me place * automatiquement même si je lui rentre le nom de table en 1er
    0
    1. 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
  8. 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
    1. 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