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 :

Jointure entre une requête imbriquée et une table


Sujet :

Langage SQL

  1. #1
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut Jointure entre une requête imbriquée et une table


    Voilà j'ai un problème avec une requête SQL. Plus précisément j'ai une sous-requête qui est elle même une sous-requête d'une sous-requête qui forme donc une petite liste de requêtes imbriquées qui me retourne une liste d'id. Chacun de ces id correspondent à un id dans une autre table qui contient une liste de nom et ce que j'aimerai c'est récupéré la liste de nom.

    Voici la longue requête imbriquée :

    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
    SELECT name 
    FROM release 
    WHERE artist_credit=(
      SELECT id 
      FROM artist_credit 
      WHERE name=(
        SELECT id 
        FROM artist_name 
        WHERE id=(
          SELECT name 
          FROM artist 
          WHERE gid='0383dadf-2a4e-4d10-a46a-e9e041da8eb3'
        )
      )
    )
    Donc cette requête me renvoi une liste d'id. Et ce que j'aimerai c'est pas la liste d'id c'est la liste des noms qui correspondent à ces id dans l'autre table. La table est structurée de la manière suivante :

    release_name
    id
    name

    La table se nomme "release_name" et elle contient deux champs "id" qui est la clé primaire et "name" qui est le nom correspondant à cet id. Ce sont tous les "names" correspondant à chaque id qui me sont renvoyés par la grosse requête que je voudrai avoir.

    Voilà, j'espère avoir été assez clair, sinon n'hésitez pas à me demander d'avantages de détails. Je vous donne le schéma de la BDD au cas où :

    http://wiki.musicbrainz.org/-/images/5/52/ngs.png

    par avance
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 198
    Points : 12 774
    Points
    12 774
    Par défaut
    Bonjour,
    Je pense que tu peux remplacer tes sous-sous-sous requêtes par des jointures*:
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT release.name FROM release 
    INNER JOIN artist_credit on artist_credit.id = release.artist_credit
    INNER JOIN artist_name on artist_name.id = artist_credit.name
    INNER JOIN artist on artist.name = artist_name.id
    WHERE artist.gid='0383dadf-2a4e-4d10-a46a-e9e041da8eb3'

    La requête devrait être un peu plus optimisée, et tu peux facilement récupérer des colonnes des tables impliquées dans la requête.

    Tatayo.

    * j'ai un peu de mal avec ta requête, des colonnes portent le même nom que des tables, tu joins des id et des noms... mais je ne dois pas être très loin.

  3. #3
    Membre émérite Avatar de lola06
    Femme Profil pro
    Consultante en Business Intelligence
    Inscrit en
    Avril 2007
    Messages
    1 316
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Consultante en Business Intelligence
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2007
    Messages : 1 316
    Points : 2 520
    Points
    2 520
    Par défaut
    Je te conseillerai déjà d'utiliser des jointures (cf tuto) à la place des requêtes imbriquées et ta nouvelle jointure se fera tout naturellement.

    Qu'est ce que tu n'arrives pas à faire ici, parce que tu ne le précises pas...
    ~ Lola ~

  4. #4
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    @Tatayo : ta requête me retourne un tableau vide et plus la liste des id.

    @lola06 : pour être plus précis (voir le schéma) avec le "artist.gid" je cherche à avoir tous les "release_name.name" correspondants. Est-ce plus clair ?
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

  5. #5
    Expert éminent sénior

    Avatar de snake264
    Homme Profil pro
    Datascientist chez Leboncoin
    Inscrit en
    Novembre 2006
    Messages
    2 914
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Datascientist chez Leboncoin
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Novembre 2006
    Messages : 2 914
    Points : 13 312
    Points
    13 312
    Par défaut
    C'est bon j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT release_name.name FROM musicbrainz.release_name
    INNER JOIN musicbrainz.release ON release.name = release_name.id 
    INNER JOIN musicbrainz.artist_credit ON artist_credit.id = release.artist_credit
    INNER JOIN musicbrainz.artist_name ON artist_name.id = artist_credit.name
    INNER JOIN musicbrainz.artist ON artist.name = artist_name.id
    WHERE artist.gid='0383dadf-2a4e-4d10-a46a-e9e041da8eb3'
    à vous pour votre aide
    Vous pouvez aller voir mes tutos et mes critiques: ici
    Ainsi que mon: blog

    Je ne répondrai à aucune question technique par MP les forums sont présents pour ça

    c'est très intelligent un ordinateur: "Keyboard ERROR. No keyboard Connected. Press any key to continue..."

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

Discussions similaires

  1. [MySQL] Problème boutons générés par une requête éxécutant chacun une requête
    Par terminathan dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/12/2009, 16h48
  2. Réponses: 1
    Dernier message: 05/11/2008, 12h04
  3. Réponses: 0
    Dernier message: 06/08/2008, 11h44
  4. [SQL] Construction d'une requête à partir d'une requête
    Par Pgs dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 15/09/2007, 15h24
  5. [Requête] Utilisation d'une fonction perso dans une requête
    Par Julien Dufour dans le forum Requêtes et SQL.
    Réponses: 5
    Dernier message: 16/03/2007, 09h53

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