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 MySQL Discussion :

DELETE FROM Table_a .. JOIN (SELECT Table_a) ?


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Par défaut DELETE FROM Table_a .. JOIN (SELECT Table_a) ?
    Bonjour,

    J'ai créé une toute petite base de test sous MySQL 5.0 :

    Table_a
    ida INT PK

    Table_b
    valb INT PK,
    a_ida INT FK Table_a(ida)

    Je souhaite supprimer les enregistrements de Table_a n'ayant aucun enregistrement commun en FK sur Table_b.

    J'ai donc tenté un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DELETE 
    FROM Table_a 
      JOIN (
        select ida, count(a_ida) AS c 
        from Table_a left join Table_b on ida = a_ida 
        group by ida having c = 0
      ) AS sr on sr.ida = Table_a.ida
    Mais j'ai une erreur de syntaxe, sans autre explication. Je ne sais pas si c'est réellement de la syntaxe, si cette opération est possible avec un DELETE ou si c'est à cause de la table Table_a qui est à la fois la cible de la modification et fait également partie de la sous requête.

    Merci si vous pouvez m'éclairer.

    C. Tobini

  2. #2
    Membre chevronné Avatar de jota5450
    Inscrit en
    Janvier 2006
    Messages
    263
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Janvier 2006
    Messages : 263
    Par défaut
    slt...

    plutot un:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    delete from Table_a
    where ida not in ( select a_ida from Table_b)
    si j´ai bein compris ce que tu veus

  3. #3
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    En fait la syntaxe d'origine passe mais quand il y a plusieurs tables qui servent il faut préciser dans lesquelles on fait le ménage :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    DELETE Table_a
    FROM Table_a 
      JOIN (
        SELECT ida, count(a_ida) AS c 
        FROM Table_a LEFT JOIN Table_b ON ida = a_ida 
        GROUP BY ida HAVING c = 0
      ) AS sr ON sr.ida = Table_a.ida

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    334
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 334
    Par défaut
    Bonjour à vous deux et merci pour les réponses,

    Les 2 fonctionnent parfaitement, la méthode 'NOT IN' étant plus simple que l'idée que j'avais au départ.

    Pour le 'DELETE', je ne pensais pas qu'un 'DELETE' sans le 'FROM' était syntaxiquement correct, à retenir. C'est plus dans l'idée un peu plus compliquée que j'avais au départ

    Merci encore et bonne soirée,

    C. Tobini

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 065
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 065
    Par défaut
    Citation Envoyé par ctobini Voir le message
    Pour le 'DELETE', je ne pensais pas qu'un 'DELETE' sans le 'FROM' était syntaxiquement correct, à retenir.
    Bien d'accord avec toi, et c'est tellement vrai que c'est dans la FAQ depuis peu, ici .
    En fait, le FROM n'est pas vraiment absent, mais MySQL autorise l'emploi d'un alias, ou du nom d'une table issue d'une jointure dans le FROM.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

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

Discussions similaires

  1. [Débutant] delete from table1 left join table2
    Par djelloharmel dans le forum VB.NET
    Réponses: 5
    Dernier message: 30/11/2011, 11h17
  2. Réponses: 2
    Dernier message: 08/03/2011, 10h26
  3. delete from inner join sous php
    Par cragoroth dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 30/09/2008, 18h03
  4. Delete From In Select
    Par licorne dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/10/2006, 14h13
  5. DELETE FROM t where t.id IN (SELECT id FROM t....)
    Par davcha dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/01/2006, 16h19

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