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 :

Colonne supplémentaire à retourner


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Colonne supplémentaire à retourner
    Bonjour, j'aurais besoin d'une petite aide pour retourner une colonne en + dans la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT ARTISTS.NOM, SONGS.TITLE AS SONG, SONGS.YEARSONG
    FROM ARTISTS 
    INNER JOIN ARTISTSONG ON ARTISTSONG.IDARTIST = ARTISTS.ID 
    INNER JOIN SONGS ON ARTISTSONG.IDSONG = SONGS.ID 
    WHERE LOWER(ARTISTS.NOM) LIKE LOWER('%Nirvana%') 
    ORDER BY SONGS.TITLE
    Je voudrais retourner aussi une colonne me renvoyant un autre nom d'artiste (ARTISTS.NOM) qui est aussi interprète de la même chanson.
    la table ARTISTSONG faisant le lien 1 - n entre la table ARTISTS et SONGS (pls artistes pour la même chanson)
    ça doit être assez simple mais je ne vois pas.
    Merci d'avance.

    Pour Aider:

    voici à quoi ressemble mes tables:

    TABLE ARTISTS
    ID NOM
    1 NIRVANA
    2 FOO FIGHTERS
    3 SUEDE

    TABLE ARTISTSONG
    ID IDARTIST IDSONG
    1 1 1
    2 1 2
    3 2 2

    TABLE SONGS
    ID TITLE YEARSONG
    1 Rape Me 1993
    2 Carry On 1995
    3 A Message to you Mary 1958

    En gros, je voudrais en résultat:

    NOM TITLE YEARSONG NOM2
    NIRVANA Rape Me 1993
    NIRVANA Carry On 1995 FOO FIGHTERS

  2. #2
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Bonjours,

    Dans le cas ou une Chanson à plus de 2 artistes quel est le moyen pour designer l'ordre des artistes ? Sans cet ordre il est impossible de définir l'artiste arrivant Juste avant (n-1) un autre sur une chanson .
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  3. #3
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 779
    Points
    30 779
    Par défaut
    Il faut faire une seconde jointure avec la table ARTISTSONG
    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
    16
    17
    18
    19
    20
    21
    22
    23
    SELECT  ARTISTS.NOM
        ,   SONGS.TITLE AS SONG
        ,   SONGS.YEARSONG
        ,   MIN(ARTISTS_2.NOM)  AS  NOM_2   --  Un des autres interprètes
    FROM    ARTISTS 
        INNER JOIN 
            ARTISTSONG 
            ON  ARTISTSONG.IDARTIST = ARTISTS.ID 
        INNER JOIN 
            SONGS 
            ON  ARTISTSONG.IDSONG = SONGS.ID
        LEFT JOIN   -- Jointure externe : la requête retourne un résultat même s'il n'y a qu'un interprète
            ARTISTSONG  ARTISTSONG_2
          INNER JOIN
              ARTISTS     ARTISTS_2
              ON  ARTISTSONG_2.IDARTIST = ARTISTS_2.ID
            ON  ARTISTSONG_2.IDSONG     = ARTISTSONG.IDSONG     -- La même chanson
            AND ARTISTSONG_2.IDARTIST   <> ARTISTSONG.IDARTIST  -- Pas le même artiste
    WHERE   LOWER(ARTISTS.NOM) LIKE LOWER('%Nirvana%') 
    GROUP BY ARTISTS.NOM    --  Pas plus d'un des autres interprètes
        ,   SONGS.TITLE
        ,   SONGS.YEARSONG
    ORDER BY SONGS.TITLE
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Super ça marche même si ce n'est pas tout à fait la requête exact.

    c'était plutôt ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    SELECT  ARTISTS.NOM
        ,   SONGS.TITLE AS SONG
        ,   SONGS.YEARSONG
        ,   MIN(ARTISTS_2.NOM)  AS  ARTIST_2   --  Un des autres interprètes
    FROM    ARTISTS 
    INNER JOIN ARTISTSONG ON  ARTISTSONG.IDARTIST = ARTISTS.ID 
    INNER JOIN SONGS ON  ARTISTSONG.IDSONG = SONGS.ID
    LEFT OUTER JOIN ARTISTSONG  ARTISTSONG_2 ON  ARTISTSONG_2.IDSONG = ARTISTSONG.IDSONG     -- La même chanson
    LEFT OUTER JOIN ARTISTS ARTISTS_2 ON  ARTISTSONG_2.IDARTIST = ARTISTS_2.ID AND ARTISTSONG_2.IDARTIST   <> ARTISTSONG.IDARTIST  -- Pas le même artiste
    WHERE LOWER(ARTISTS.NOM) LIKE LOWER('%Nirvana%') 
    GROUP BY ARTISTS.NOM--  Pas plus d'un des autres interprètes
        ,   SONGS.TITLE
        ,   SONGS.YEARSONG
    ORDER BY SONGS.TITLE

    Merci alt 24, ça m'a beaucoup aidé

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut Mon problème n'est pas tout à fait réglé
    En fait, dans la dernière requête, on ne peut retourner qu'un seul artiste associé.
    Or je peux en avoir 2 ou plusieurs pour la même chanson!
    Comment puis-je faire? Faut-il autant de nouvelles jointures pour récupérer tous les artistes associés(en y insérant 5 au maxi, il est rare d'en voir plus de 5 pour une chanson) ou y-a t-il une solution plus simple?

    Merci à nouveau pour vos réponses.

  6. #6
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Ta solution de jointure n'est surement pas la bonne , car d'une le nombre d'artiste par chanson comme tu le dis n'est pas borné des façons stricte , rare ne veut pas dire impossible ...

    il est rare d'en voir plus de 5 pour une chanson
    De 2 la requêtes dépend de l'attendu ...

    Dans ce cas quel est le résultat attendu:

    Est-ce une ligne par chanson avec une colonne par artiste ?
    Est-ce une ligne par chanson avec colonne contenant une chaine de caractère listant tous les artistes ?
    Est-ce une ligne par Chanson et artiste secondaire ?
    ou autre chose ...
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    Citation Envoyé par mokona18 Voir le message
    Est-ce une ligne par chanson avec une colonne par artiste ?
    Est-ce une ligne par chanson avec colonne contenant une chaine de caractère listant tous les artistes ?
    Est-ce une ligne par Chanson et artiste secondaire ?
    ou autre chose ...
    Mon résultat attendu est une ligne par chanson avec colonne contenant une chaine de caractère listant tous les artistes.

    NOM TITLE YEARSONG COARTISTES
    NIRVANA Rape Me 1993
    NIRVANA Carry On 1995 FOO FIGHTERS;ARTISTS2;ARTIST3

  8. #8
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    Quel est ton SGBD ?
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2014
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France

    Informations professionnelles :
    Activité : Ressources humaines

    Informations forums :
    Inscription : Mars 2014
    Messages : 10
    Points : 6
    Points
    6
    Par défaut
    je suis sous openoffice base

  10. #10
    Membre éclairé Avatar de GeekMokona
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Novembre 2011
    Messages
    327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 44
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant en Business Intelligence
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2011
    Messages : 327
    Points : 817
    Points
    817
    Par défaut
    De mon point de vue et comme je ne suis pas Experte OpenOffice : openoffice base est un SGBD "light" et donc il ne permet pas de faire du Pivot et ou de 'la concaténation de Lignes' nécessaire pour la colonne COARTISTES . je te conseil de regarder par Calc ou de Changer de SGBD
    Séverine Capon - Consultante MS BI
    Rejoignez la communauté du chat et partagez vos connaissances ou vos questions avec nous

    Merci de dés que le commentaire vous a aidé ou de marquer si votre problème est résolu

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

Discussions similaires

  1. [XL-2007] Comparer deux colonnes et retourner le résultat d'une troisième
    Par Ledobs dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 18/04/2018, 21h21
  2. afficher des colonnes supplémentaires à un tableau
    Par Hallewest dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 30/09/2009, 11h47
  3. Ajout d'une colonne supplémentaire a un crosstab
    Par Sojatoad dans le forum BIRT
    Réponses: 9
    Dernier message: 30/07/2009, 17h38
  4. [DeskI V5-V6] Eviter colonne supplémentaire dans excel
    Par lenka33 dans le forum Débuter
    Réponses: 5
    Dernier message: 05/05/2009, 10h43
  5. Réponses: 1
    Dernier message: 24/10/2008, 13h08

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