IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes et SQL. Discussion :

Requête DELETE avec jointure


Sujet :

Requêtes et SQL.

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Requête DELETE avec jointure
    Bonjour,

    Je suis en train de coder un module VBA sous Access 2003.
    J'aimerais exécuter une requête SQL avec une jointure.

    Ma première idée était :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Qdf = maBase.CreateQueryDef("", "DELETE FROM Table1 t1 WHERE NOT EXISTS (SELECT * FROM Table2 t2 WHERE t2.unChamp='youhou' AND t1.unChamp=t2.unAutreChamp);")
    Qdf.Execute
    Mais cela fait planter Access (sic), qui se ferme. J'observe néanmoins que la requête a été correctement exécutée... De plus le traitement est très long (cela vient du fait que Table1 n'est pas indexée, mais je ne peux pas l'indexer pour d'autres raisons).

    Je pensais donc faire autrement, comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set Qdf = maBase.CreateQueryDef("", "DELETE FROM Table1 t1 LEFT OUTER JOIN Table2 t2 ON t1.unChamp = t2.unAutreChamp WHERE t2.unChamp = 'youhou' AND IsNull(t2.unAutreChamp);")
    Qdf.Execute
    Mais cela ne marche pas, Access me sort une erreur comme quoi je n'ai pas spécifié la table contenant les enregistrements à supprimer...

    Si quelqu'un peut me donner son avis ou bien me dire où le bât blesse, ce serait aimable.

    Merci

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Hum en fait mes deux tables sont correctement indexées, mais la requête avec NOT EXISTS prend 1 min pour traiter 24 000 enregistrements...
    Quelqu'un aurait une idée ?

  3. #3
    Rédacteur/Modérateur

    Avatar de Jean-Philippe André
    Homme Profil pro
    Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Inscrit en
    Juillet 2007
    Messages
    14 642
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Power Platform, ex-Développeur VBA/C#/VB.Net
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2007
    Messages : 14 642
    Points : 34 350
    Points
    34 350
    Par défaut
    Salut,
    il est fortement déconseillé d'utiliser la clause not exists.
    Regarde si tu ne peux pas utiliser des subterfuges pour accélérer la requête.
    par exemple

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Ou peut-être une indication pour que la syntaxe avec LEFT OUTER JOIN soit correcte ?

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Février 2005
    Messages
    1 751
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1 751
    Points : 2 368
    Points
    2 368
    Par défaut
    Bonjour,

    Citation Envoyé par fcpwns Voir le message

    Je pensais donc faire autrement, comme :
    [...]
    Mais cela ne marche pas, Access me sort une erreur comme quoi je n'ai pas spécifié la table contenant les enregistrements à supprimer...

    Si quelqu'un peut me donner son avis ou bien me dire où le bât blesse, ce serait aimable.
    Avec 1 an de retard, voici la solution à ce problème expliquée dans le lien suivant:
    ACC2000: "Could Not Delete from Specified Tables" Error Message in Delete Query

    Et le code SQL (à vérifier quand même):
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    DELETE DISTINCTROW T1.* 
    FROM Table1 t1 
        LEFT OUTER JOIN (SELECT Table2.* WHERE t2.unChamp = 'youhou') t2 
            ON t1.unChamp = t2.unAutreChamp 
    WHERE t2.unAutreChamp IS NULL;

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Access] Prob ds un Delete avec jointure
    Par fikou dans le forum Requêtes et SQL.
    Réponses: 10
    Dernier message: 25/06/2009, 00h04
  2. [MySQL] requête combinée avec jointure ?
    Par steve o'steen dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 18/10/2006, 14h43
  3. Requête DELETE avec jointure
    Par Roach- dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2006, 15h00
  4. [MySQL] Erreur SQL 1064 : Requête imbriquée avec jointure !
    Par patchankito dans le forum Langage SQL
    Réponses: 5
    Dernier message: 31/01/2006, 10h37
  5. Delete avec jointure impossible
    Par _developpeur_ dans le forum Access
    Réponses: 13
    Dernier message: 18/11/2005, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo