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 jointure


Sujet :

Langage SQL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 28
    Points
    28
    Par défaut delete avec jointure
    Bonjour,

    Je voudrais transfomer cette requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select * FROM `l_client_marque` JOIN `marque` ON l_client_marque.id_marque = `marque`.`Id` 
    WHERE `l_client_marque`.`id_client` = 1579 
    AND `marque`.`Type` like '%truc%' 
    and marque.nom BETWEEN 'a' AND 'g'
    en un delete de ces memes valeurs...
    mais j'arrive pas ....

    qq'un peut m'aider?

  2. #2
    Expert éminent sénior
    Avatar de fsmrel
    Homme Profil pro
    Spécialiste en bases de données
    Inscrit en
    Septembre 2006
    Messages
    8 002
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Spécialiste en bases de données
    Secteur : Conseil

    Informations forums :
    Inscription : Septembre 2006
    Messages : 8 002
    Points : 30 905
    Points
    30 905
    Billets dans le blog
    16
    Par défaut
    On ne sait pas quelle est la clé primaire de la table l_client_marque. On va supposer qu'il s'agit de la paire (id_client, id_marque) si on admet qu'un client peut être concerné par plusieurs marques. Dans ces condions, une requête de ce genre devrait fonctionner :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    delete from l_client_marque
         where  Id_client = 
                (select id_client
                 from   l_client_marque as x JOIN marque as y ON x.id_marque = y.Id    
                 WHERE  x.id_client = '1579' 
                  AND   y.Type LIKE '%truc%' 
                  AND   y.nom BETWEEN 'a' AND 'g')
            AND Id_marque = 
                (select id_marque
                 from   l_client_marque as x JOIN marque as y ON x.id_marque = y.Id    
                 WHERE  x.id_client = '1579' 
                  AND   y.Type LIKE '%truc%' 
                  AND   y.nom BETWEEN 'a' AND 'g') ;

    Si un client ne peut être associé qu'à une seule marque, le AND Id_marque = (Select ...) peut disparaître.
    (a) Faites simple, mais pas plus simple ! (A. Einstein)
    (b) Certes, E=mc², mais si on discute un peu, on peut l’avoir pour beaucoup moins cher... (G. Lacroix, « Les Euphorismes de Grégoire »)
    => La relativité n'existerait donc que relativement aux relativistes (Jean Eisenstaedt, « Einstein et la relativité générale »)

    __________________________________
    Bases de données relationnelles et normalisation : de la première à la sixième forme normale
    Modéliser les données avec MySQL Workbench
    Je ne réponds pas aux questions techniques par MP. Les forums sont là pour ça.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    Merci mais il me met :

    #1093 - You can't specify target table 'l_client_marque' for update in FROM clause

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    en faite la requete dont j'aurais besoin :
    delete from l_opticien_marque where Id_opticien = '1579' and Id_marque = (select id_marque from marque WHERE Type LIKE '%produit%' AND nom BETWEEN 'a' AND 'g')

    mais il me dit que "Subquery returns more than 1 row"
    une idée?

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2009
    Messages
    37
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 37
    Points : 28
    Points
    28
    Par défaut
    ok j'ai trouvé.... il suffit de mettre un in (j'ai tester au pif et la chance ma sourie)

    merci!! je suis assez malade avec une grosse échéance demain et ton aide m'a bien aidé!!! (lapalisade mais sincere)

+ 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. [SQL] DELETE avec jointures
    Par eagleleader dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 12/10/2007, 09h37
  3. [SqlServer 2k] DELETE avec jointure
    Par Filippo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 22/06/2007, 18h12
  4. Requête DELETE avec jointure
    Par Roach- dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/03/2006, 15h00
  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