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

Langage SQL Discussion :

Delete avec sous requetes qui retourne plusieurs resultats


Sujet :

Langage SQL

  1. #1
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut Delete avec sous requetes qui retourne plusieurs resultats
    Bonjour,
    Je suis un manche en sql.
    Je vais vous expliquer mon problème avec un exemple simple:

    J'ai une table_1 qui contient (entre autres) des first_name et des id.
    J'ai une table_2 qui contient des id et pleins d'autres trucs...

    Je veux détruire dans la table_2 l'enregistrement qui correspond au first_name 'Alain' (dans la table_1), je fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    delete from table_2 where id=(select id from table_1 where first_name='Alain');
    Mais voila: si j'ai plusieurs Alain dans la table_1, je veux détruire tous les champs correspodant dans la table_2. Donc je pensais que cette requète était correcte, mais j'ai une erreur à l'execution:
    ERROR: more than one row returned by a subquery used as an expression
    est-ce qu'il y a une solution pour faire ce que je cherche à faire avec 1 seule requète?
    Merci!

  2. #2
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 048
    Points
    34 048
    Billets dans le blog
    14
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM table_2
    INNER JOIN table_1 ON table_2.id = table_1.id
    WHERE first_name = 'Alain'

  3. #3
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    Hello,

    merci pour ta réponse. J'ai essayé le inner join mais ça ne marche pas.
    Si je le fais avec un SELECT, c'est ok, mais si je le fais avec un DELETE, ça joue pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT * FROM table_2
    INNER JOIN table_1 ON table_2.id = table_1.id
    WHERE first_name = 'Alain'
    --> je vois bien la liste de ce que je veux détruire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DELETE FROM table_2
    INNER JOIN table_1 ON table_2.id = table_1.id
    WHERE first_name = 'Alain'
    --> j'ai une erreur:
    ERROR: syntax error at or near "inner"
    je suis un peu perdu.

    EDIT: j'ai trouvé ça, mais j'y parviens toujours pas...
    http://onfaitduweb.com/programmation...er-join-mysql/

  4. #4
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut
    Finalement j'ai trouvé une autre solution. je me réponds donc a moi même:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DELETE FROM table_2
    WHERE EXISTS (select * from table_1 where table_2.id = table_1.id AND table_1.first_name='Alain') ;

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

Discussions similaires

  1. Procédure stockée et sous requete qui retourne plus d'une valeur
    Par paintbox dans le forum Développement
    Réponses: 5
    Dernier message: 21/11/2012, 17h42
  2. requete SQL avec sous requete qui ne fonctionne pas
    Par skyarnangel dans le forum Langage SQL
    Réponses: 8
    Dernier message: 06/02/2009, 14h47
  3. DELETE avec sous requete
    Par tinmarbusir dans le forum Requêtes
    Réponses: 5
    Dernier message: 04/02/2008, 00h54
  4. Réponses: 8
    Dernier message: 11/05/2006, 23h18
  5. INTERBASE: DELETE avec sous requete conditionnelle
    Par Papino dans le forum InterBase
    Réponses: 6
    Dernier message: 17/02/2005, 22h55

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