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 :

Epurer le résultat d'un select


Sujet :

Langage SQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par défaut Epurer le résultat d'un select
    Bonjour,

    J'ai donc ma gentille requete:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.name, t2.name AS nameT2
    FROM table1 AS t1
    LEFT JOIN table3 AS t3 ON t3.t1_id = t1.id
    LEFT JOIN table2 AS t2 ON t3.t2_id = t2.id
    WHERE t1.id IN (1,2);
    qui me donne, et c'est en effet ce que je veux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +--------+-------------+
    | name   | nameT2      |
    +--------+-------------+
    | foo    | XXX         | 
    | foo    | YYYYY       | 
    | foo    | ZZZZZZZ     | 
    | foo    | WWWWWWWWWW  | 
    | bar    | AAAAAAAA    | 
    | bar    | TTTT        | 
    +--------+-------------+
    Mais pour des questions de place - car sur des requetes qui retournent beaucoup plus de colonnes et beaucoup beaucoup de lignes, ça peu finir par peser tout ça dans le code qui s'en sert - j'aimerai obtenir ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    +--------+-------------+
    | name   | nameT2      |
    +--------+-------------+
    | foo    | XXX         | 
    |        | YYYYY       | 
    |        | ZZZZZZZ     | 
    |        | WWWWWWWWWW  | 
    | bar    | AAAAAAAA    | 
    |        | TTTT        | 
    +--------+-------------+
    Pour ce faire j'ai un peu fouillé le net et j'ai trouvé cet intéréssant fil ( en anglais ): http://www.dbforums.com/showthread.php?t=927152

    Mais a cause - je suppose - de mes jointures et toussa toussa et bien je n'y arrive pas du tout.

    Une ( ou des ) idées ?
    Merci déja d'avoir lu on post

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    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 136
    Par défaut
    Il s'agit là de cosmétique, qui n'est pas le but du langage SQL.
    C'est à l'application de se charger de la mise en forme des données.
    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.

  3. #3
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Bonjour,

    Tente ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    GROUP BY name
    WITH ROLLUP

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Tout à fait d'accord, cela dit...
    Si tu es sur SQL server, tu peux t'amuser avec un truc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    SELECT case (row_number() over(partition by (Col1) order by untruc)) when 1 then col1 else "" end, 
    col2
    FROM ...
    Tu définis un partitionnement qui te permet de numéroter tes enregs... et donc de savoir quand ce n'est pas le premier de la série "foo".

  5. #5
    Membre éclairé Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par défaut
    Heu non, ce n'est pas de la cosmétique, en tout cas pas dans mon esprit. Admettons que je rameutte des lignes de +10 colonnes, et que seule 1 des colonnes varie, alors les 9 autres seront dupliquées et si mon résultat fait pas mal de lignes, 9*pas-mal-de -lignes ça peu constituer beaucoup de place. Beaucoup de place en mémoire, beaucoup d'octets qui vont inutilement transiter de l'appli au serveur de la BD, ..

    Voila pour ma défense
    Sur ce, je vais voir le lien que tu m'a donné, et merci pour ta réponse.

    EDIT: Hu ! j'ai eu 2 réponses entre-temps, je répondais là à la premiere

  6. #6
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    Moi je pense que c'est le ROLLUP qu'il te faut ...

    [EDIT] Ok

  7. #7
    Membre éclairé Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par défaut
    J'ai éssayé avec GROUP BY et WITH ROLLUP mais ça ne marche pas. D'ailleurs pourquoi ça marcherai en fin de compte, WITH ROLLUP ne sert qu'a donner un total non ? et GROUP BY m'enlève des colonnes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    +--------+-------------+
    | name   | nameT2      |
    +--------+-------------+
    | foo    | XXX         | 
    | bar    | AAAAAAAA    |  
    +--------+-------------+
    ( ps: la y'a pas le rollup )
    ( ps: Et pitite précision je suis sous mysql5)

    @pacmann:
    Si j'ai bien compris c'est un peu le principe de la solution utilisé à la fin du lien que j'ai mis dans mon premier post ( mais sans "partitionement" puisque mysql ) sauf que je n'arrive pas à le reproduire avec ma structure 1 < n > m

  8. #8
    Membre Expert

    Homme Profil pro
    SDE
    Inscrit en
    Août 2007
    Messages
    2 013
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : SDE

    Informations forums :
    Inscription : Août 2007
    Messages : 2 013
    Par défaut
    D'ailleurs pourquoi ça marcherai en fin de compte, WITH ROLLUP ne sert qu'a donner un total non ?
    Exact, je doit confondre avec un truc désolé


  9. #9
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Désolé, j'avais pas lu le lien...

    C'est quoi n et m ?

  10. #10
    Membre éclairé Avatar de knoodrake
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    86
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Juin 2007
    Messages : 86
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Désolé, j'avais pas lu le lien...

    C'est quoi n et m ?
    Ah heu c'était juste ma façon de dire que table1 "possède" n table 3 ( et n étant une table qui sert a lier les 2 autres ) désolé.
    (Edit: je m'apperçois que j'ai pas été beaucoup plus clair m'enfin bref, je pourrai pas faire mieux mais c'est pas important )

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

Discussions similaires

  1. Mélange du résultat d'un select
    Par elmaxbo dans le forum Requêtes
    Réponses: 2
    Dernier message: 09/05/2005, 13h01
  2. INSERT avec valeur connue et résultat d'un SELECT...
    Par snoop dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 27/04/2005, 08h54
  3. Formater résultat d'un select.
    Par wilaya dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 14/04/2005, 15h38
  4. [Sybase] résultat d'un select dans une variable
    Par stoz dans le forum Sybase
    Réponses: 2
    Dernier message: 14/09/2004, 14h28
  5. Insérer le résultat d'un SELECT
    Par zoubidaman dans le forum SQL
    Réponses: 3
    Dernier message: 16/08/2004, 16h49

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