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 :

pb requete imbriquée


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Par défaut pb requete imbriquée
    Bonjour,
    Dur dur les requêtes imbriquées...

    Voici mon cas :
    J'ai 2 tables :

    table1:
    id
    nom
    statut

    table2
    id
    idtable1
    statut

    Je cherche a obtenir la liste des noms de la table1 qui a un statut=1 dans la table2.

    Ca parait facile pour certains?

    D'avance, merci

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    Salut,

    3 possibilités :
    1) En utilisant une jointure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select t1.nom
    from table1 t1
    inner join table2 t2
    	on t1.id=t2.idtable1
    where t2.statut=1
    2) en utilisant IN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select nom from table1
    where id in (select idtable1 from table2 where statut=1)
    3) en utilisant EXISTS
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select t1.nom
    from table1 t1
    where exists (select 1 from table2 t2 where t2.idtable1=t1.id and t2.statut=1)
    Je te laisse choisir la plus performante dans ton cas

    PS : Joue du DISTINCT si tu n'as pas une relation (1,1) entre table1 et table2.

    [EDIT] sauf dans le cas du EXISTS, il me semble

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 5
    Par défaut ok
    super! ca a l'air de fonctionner.
    Même si je n'ai pas tout compris-notamment sur ces différences

    Merci encore!

    Oska06

  4. #4
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 955
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 955
    Par défaut
    En SQL, tu peux obtenir le même résultat par diverses requêtes.
    Dans le cas présent, je dirais que le IN est plus intuitif lorsqu'on débute, la jointure plus propre et le EXISTS peut avantageusement remplacer un IN en terme de performance dans certain cas.
    Le but étant de choisir la solution la plus performante, surtout quand les volumétries sont très importantes.
    Bon, j'espère ne pas avoir dis de bêtises...
    @+

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

Discussions similaires

  1. [requete] requete imbriquée
    Par karamazov994 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 27/07/2005, 18h54
  2. Requete imbriquée, oui mais...
    Par zax-tfh dans le forum Requêtes
    Réponses: 6
    Dernier message: 24/03/2005, 02h48
  3. Equivalent d'une requete imbriquée ??
    Par webtheque dans le forum Requêtes
    Réponses: 8
    Dernier message: 31/08/2004, 11h07
  4. Requetes imbriquées et jointures
    Par Emile Le Tueur* dans le forum Requêtes
    Réponses: 4
    Dernier message: 01/04/2004, 00h12
  5. Requete imbriquée sur Firebird ou Interbase
    Par Thib dans le forum Bases de données
    Réponses: 2
    Dernier message: 08/03/2004, 10h00

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