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 :

Requête SQL imbriqué, 3 tables, plusieurs colonnes


Sujet :

Requêtes MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2007
    Messages : 36
    Points : 32
    Points
    32
    Par défaut Requête SQL imbriqué, 3 tables, plusieurs colonnes
    Alors voici mon problème :
    j'ai 3 tables contenant des informations que je veux récupérer

    table1 qui contient : name et guid
    exemple :
    ligne 1 : toto, 1
    ligne 2 : tata, 2


    table2 qui contient : id et string
    exemple :
    ligne 1 : 01, chanteur
    ligne 2 : 02, guitariste
    ligne 3 : 03, lyon
    ligne 4 : 04, paris


    table3 qui contient : entity_guid, value_id et name_id
    exemple :
    ligne 1 : 1, 01, 100
    ligne 2 : 2, 02, 100
    ligne 3 : 1, 03, 200
    ligne 4 : 2, 04, 200

    (ici name_id=100 correspond au métier et name_id=200 correspond à la ville)

    j'aimerais obtenir en sortie :
    ligne 1 : toto, chanteur, lyon
    ligne 2 : tata, guitariste, paris


    Mais je m'embrouille dans ma requête et je n'arrive pas à m'en sortir ,
    voila pour l'instant oû j'en suis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT string FROM table2
    WHERE id IN 
          ( SELECT value_id FROM table3
                     WHERE entity_guid IN 
                               ( SELECT guid,name FROM table1
                                  ORDER by guid ;
                                )
           );
    Si quelqu'un à une piste je suis preneur
    Merci d'avance pour votre patience et votre temps

  2. #2
    Modérateur
    Avatar de sevyc64
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2007
    Messages
    10 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 223
    Points : 28 213
    Points
    28 213
    Par défaut
    Tout d'abord, 2 remarques :
    - Il n'est vraiment pas recommandé de choisir des mots réservés comme nom de colonnes. name et string sont des mots réservés.
    - le chois de mélanger ville et profession dans une seule table (table2) n'est pas forcément un très bon choix. ça aurait être fait en 2 tables distinctes.


    Pour ce qui est de la requête, j'aurais plutôt vu les choses ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select T1.[name],T2.[string],T2bis.[string]
    from TABLE1 T1
    inner join TABLE3 T3 ON T1.guid=T3.entity_guid AND T3.name_id=100
    inner join TABLE3 T3bis ON T1.guid=T3bis.entity_guid AND T3bis.name_id=200
    inner join TABLE2 T2 ON T2.id=T3.value_id
    inner join TABLE2 T2bis ON T2bis.id=T3bis.value_id
    Le choix qui a été fiat pour table2 complique effectivement un peu les choses

  3. #3
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    La protection des mots réservés, en MySQL, s'opère plutôt avec le caractère ALT GR + 7
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    T1.`name`,T2.`string`,T2bis.`string`
    ce qui, de mon point de vue, n'enlève évidemment rien à la pertinence de la remarque de sevyc64, il est assez ballot d'utiliser des mots clés réservés de MySQL comme noms de colonnes, tables ou autres.

  4. #4
    Nouveau membre du Club
    Profil pro
    Développeur Web
    Inscrit en
    Octobre 2007
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Octobre 2007
    Messages : 36
    Points : 32
    Points
    32
    Par défaut
    Alors d'abord merci beaucoup pour vos réponses,
    la requête de sevyc64 avec la syntaxe de Maljuna Kris fonctionne bien

    Ensuite pour le choix des colonnes et le mélange des tables, c'est malheureusement indépendant de ma volonté vu que ce n'est pas moi qui ai choisi cette structure mais qu'elle m'était imposé.

    Il est clair que cette organisation des données n'est pas forcément la plus pertinente

    Encore merci

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

Discussions similaires

  1. [Requête SQL] - Select count avec plusieurs tables
    Par Pithonnette dans le forum SQL
    Réponses: 7
    Dernier message: 25/06/2009, 19h19
  2. Requête SQL sur 3 tables
    Par Invité dans le forum Langage SQL
    Réponses: 3
    Dernier message: 03/07/2006, 13h19
  3. [SQL] Problème avec script de pagination et requête sql sur deux tables
    Par psychoBob dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 12/06/2006, 14h06
  4. problème de requête SQL sur 3 tables pour un while
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/04/2006, 16h55
  5. Update sql, avec une table à deux colonnes ...
    Par dcz dans le forum Langage SQL
    Réponses: 8
    Dernier message: 04/04/2006, 18h06

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