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 suppression avec jointure ? [AC-2010]


Sujet :

Requêtes et SQL.

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 73
    Points : 46
    Points
    46
    Par défaut Requète suppression avec jointure ?
    Bonjour, mon problème ici est une requête suppression qui bute sur un message du type "Erreur: spécifiez la table des enregistrements à supprimer"

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    SQL_Def = "SELECT Test_Alerte_Z2N_2.[Date Défaut]"
    SQL_Def = SQL_Def & " FROM Test_Alerte_Z2N_2"
    SQL_Def = SQL_Def & " GROUP BY Test_Alerte_Z2N_2.[Date Défaut]"
    SQL_Def = SQL_Def & " ORDER BY Test_Alerte_Z2N_2.[Date Défaut] DESC"
    Set rs_SQL_Def = CurrentDb.OpenRecordset(SQL_Def)
     
    If Not rs_SQL_Def.EOF Then
        rs_SQL_Def.MoveLast
        Z = rs_SQL_Def.RecordCount
     
        rs_SQL_Def.MoveFirst
     
        Do While Not rs_SQL_Def.EOF
     
            Date_ = rs_SQL_Def("Date Défaut").Value
     
            SQL_Def2 = "SELECT Test_alerte_Z2N_2.[Code Défaut], Test_alerte_Z2N_2.[Première heure défaut]"
            SQL_Def2 = SQL_Def2 & " FROM Test_Alerte_Z2N_2"
            SQL_Def2 = SQL_Def2 & " WHERE ((Test_alerte_Z2N_2.[Code Défaut] = '" & "AC-109" & "') OR (Test_alerte_Z2N_2.[Code Défaut] = '" & "AC-102" & "')) AND Test_Alerte_Z2N_2.[Date Défaut] = #" & Date_ & "# "
            SQL_Def2 = SQL_Def2 & " GROUP BY Test_alerte_Z2N_2.[Code Défaut], Test_alerte_Z2N_2.[Première heure défaut], Test_Alerte_Z2N_2.[Date Défaut]"
            SQL_Def2 = SQL_Def2 & " ORDER BY Test_alerte_Z2N_2.[Première heure défaut] DESC;"
            Set rs_SQL_Def2 = CurrentDb.OpenRecordset(SQL_Def2)
     
            If Not rs_SQL_Def2.EOF Then
            rs_SQL_Def2.MoveLast
            y = rs_SQL_Def2.RecordCount
     
            If y >= 2 Then
     
            rs_SQL_Def2.MoveFirst
            Do While Not rs_SQL_Def2.EOF
     
                Code1 = rs_SQL_Def2("Code Défaut").Value
                Heure1 = rs_SQL_Def2("Première heure Défaut").Value
     
     
                DoCmd.RunSQL "INSERT INTO Test_Alerte_Z2N_2_Temp ([Code défaut],[Première Heure Défaut]) Values ('" & rs_SQL_Def2("Code Défaut").Value & "',#" & rs_SQL_Def2("Première heure Défaut").Value & "#)"
     
     
                rs_SQL_Def2.MoveNext
     
                Code2 = rs_SQL_Def2("Code Défaut").Value
                Heure2 = rs_SQL_Def2("Première heure Défaut").Value
     
     
     
                DoCmd.RunSQL "INSERT INTO Test_Alerte_Z2N_2_Temp ([Code défaut],[Première Heure Défaut]) Values ('" & rs_SQL_Def2("Code Défaut").Value & "',#" & rs_SQL_Def2("Première heure Défaut").Value & "#)"
     
     
                    If Code1 <> Code2 Then
     
                        HeureDiff = DateDiff("s", Heure1, Heure2)
     
                        If HeureDiff < 5 Then 'Durée à déterminer en secondes
     
                            DoCmd.RunSQL "DELETE FROM Test_Alerte_Z2N_2 INNER JOIN Test_Alerte_Z2N_2_Temp ON Test_Alerte_Z2N_2.[Code Défaut] = Test_Alerte_Z2N_2_Temp.[Code Défaut] WHERE ((Test_Alerte_Z2N_2_Temp.[Code Défaut] = Test_Alerte_Z2N_2.[Code Défaut]) AND (Test_Alerte_Z2N_2_Temp.[Première heure Défaut] = Test_Alerte_Z2N_2.[Première heure Défaut]))"
     
                        Else: DoCmd.RunSQL "DELETE FROM Test_Alerte_Z2N_2 INNER JOIN Test_Alerte_Z2N_2_Temp ON Test_Alerte_Z2N_2.[Code Défaut] = Test_Alerte_Z2N_2_Temp.[Code Défaut] WHERE ((Test_Alerte_Z2N_2_Temp.[Code Défaut] = Test_Alerte_Z2N_2.[Code Défaut]) AND (Test_Alerte_Z2N_2_Temp.[Code Défaut] = '" & AC - 102 & "') AND (Test_Alerte_Z2N_2_Temp.[Première heure Défaut] = Test_Alerte_Z2N_2.[Première heure Défaut]))"
                        End If
     
                    ElseIf Code1 = "AC-102" And Code2 = "AC-102" Then
                        DoCmd.RunSQL "DELETE FROM Test_Alerte_Z2N_2 INNER JOIN Test_Alerte_Z2N_2_Temp ON Test_Alerte_Z2N_2.[Code Défaut] = Test_Alerte_Z2N_2_Temp.[Code Défaut] WHERE ((Test_Alerte_Z2N_2_Temp.[Code Défaut] = Test_Alerte_Z2N_2.[Code Défaut]) AND (Test_Alerte_Z2N_2_Temp.[Première heure Défaut] = Test_Alerte_Z2N_2.[Première heure Défaut]))"
                        Else
                        End If
     
                DoCmd.RunSQL "DELETE * FROM Test_Alerte_Z2N_2_Temp"
     
                rs_SQL_Def2.MoveNext
                Loop
     
                Else
                End If
            Else
            End If
     
        rs_SQL_Def.MoveNext
        Loop
     
    Else
    End If

    Et la requête suppression qui pose soucis (et je pense que toute poseront le même soucis vu qu'elles sont écrites de la même manière):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "DELETE FROM Test_Alerte_Z2N_2 INNER JOIN Test_Alerte_Z2N_2_Temp ON Test_Alerte_Z2N_2.[Code Défaut] = Test_Alerte_Z2N_2_Temp.[Code Défaut] WHERE ((Test_Alerte_Z2N_2_Temp.[Code Défaut] = Test_Alerte_Z2N_2.[Code Défaut]) AND (Test_Alerte_Z2N_2_Temp.[Première heure Défaut] = Test_Alerte_Z2N_2.[Première heure Défaut]))"


    En fouinant un peu, je tombe là dessus:
    https://support.microsoft.com/fr-fr/kb/467066


    Le problème c'est que derrière, j'ai des critères particuliers quoi, comme vous avez pu le voir, et ce lien, me dit de passer par le "*" de ma table .... seulement derrière, on peut pas appliquer de critères .... Alors, comment dois je m'y prendre pour supprimer les critères de la Table A en fonction de critères liés entre la Table A et la Table B ?

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de nico84
    Homme Profil pro
    Consultant/développeur ERP
    Inscrit en
    Mai 2008
    Messages
    3 117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant/développeur ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 3 117
    Points : 5 244
    Points
    5 244
    Par défaut
    Bonjour,

    J'ai lu en diagonale
    Ca dépend de la base de donnée, certaines acceptent le delete sur (certaines) jointures, d'autres non. 2 pistes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete t1.* from t1 inner join t2 on ... where ...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from t1 where (not) exists (select * from t1 inner join t2 on .. where ...)
    Normalement la 2e solution est universelle, la 1e marche dans access je crois si la jointure n'est pas en lecture seule

  3. #3
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 73
    Points : 46
    Points
    46
    Par défaut
    Je crois que je vais essayer ta deuxième solution !

    A un moment je me suis retrouvé confronté à une erreur genre " exists ... Clause Where ... "

    Je teste ça, et je reviens vers vous !

  4. #4
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 73
    Points : 46
    Points
    46
    Par défaut
    Alors là ... c'est fort, j'ai soi disant une parenthèse ")" en trop dans ma requête:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DoCmd.RunSQL "DELETE FROM Test_Alerte_Z2N_2 WHERE (not) exists (SELECT * FROM Test_Alerte_Z2N_2 INNER JOIN Test_Alerte_Z2N_2_Temp ON Test_Alerte_Z2N_2.[Code Défaut] = Test_Alerte_Z2N_2_Temp.[Code Défaut] WHERE Test_Alerte_Z2N_2_Temp.[Code Défaut] = Test_Alerte_Z2N_2.[Code Défaut] AND Test_Alerte_Z2N_2_Temp.[Première heure Défaut] = Test_Alerte_Z2N_2.[Première heure Défaut])"
    C'est laquelle ?

    Non mais franchement, je ne comprend pas laquelle est en trop là ...



    EDIT: C'est le "not" entre parenthèse qui ne doit pas l'être haha ! Tu m'as induit en erreur !
    EDIT2: Et pour mon cas, il ne faut pas le "not", ouais, je suis une bille et j'ai pas réfléchi aux premiers abords, maintenant je comprends pourquoi c'était entre parenthèses


    Bref, ça marche maintenant, merci !

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

Discussions similaires

  1. requête de suppression avec jointure
    Par zskiredj dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 10/01/2011, 16h21
  2. Requête UPDATE avec jointure
    Par petburn dans le forum SQL
    Réponses: 7
    Dernier message: 30/07/2007, 15h22
  3. [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, 15h43
  4. Requête DELETE avec jointure
    Par Roach- dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2006, 16h00
  5. [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, 11h37

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