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 :

[Oracle] Tris sur des jointure externes


Sujet :

Langage SQL

  1. #1
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [Oracle] Tris sur des jointure externes
    Bonjour,

    Mon problème est assez simple, mais sa résolution relève du casse-tête chinois. J'utilise Oracle pour ce problème, mais celà importe peu...

    J'ai deux tables, une table Methode et une table Paramètre. Comme vous vous en doutez, une jointure externe existe entre les deux tables : à une méthode est associé un ou plusieurs paramètres.

    Je souhaite afficher sur une ligne dans un tableau (une IHM) la méthode avec ses paramètres.
    Pour celà, je fais un :
    select m.id, p.id from methode m, parametre p where m.id =(+) p.id
    (+) est ma jointure externe pour ceux qui veulent une description du SQL d'il y a 15 ans .
    Et mon algo pour afficher les méthode et ses paramètres est :
    curseur = maRequeteSelect
    pour i=1 à nbLignesAffichables faire
    pk = m.id
    afficher m.met, p.par
    curseur.suivant
    tant que m.id = pk faire
    afficher p.par
    curseur.suivant
    fin tant que
    changer de ligne dans le tableau
    fin pour


    Celà marche très bien.
    L'autre information est que les tables utilisées sont très grandes, et donc je ne peux pas les mettre entièrement en mémoire.
    Mon défit est maintenant de trier mon tableau par paramètre :
    si j'ai une méthode avec deux paramètres 'aaa' et 'zzz' elle sera affichée avant la méthode avec les paramètres 'bbb' et 'truc'.
    Si j'utilise la requête précédente en faisant un order by p.id, les m.id se retrouvent logiquement éparpillés dans les tuples résultants. Et donc mon algo ne marche plus. Et je peux difficilement parcourir les autres tuples à la recherche des autres paramètres, car les tables font plusieurs millions de tuples...

    Une idée ?

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par roychris
    ...

    Mon défit est maintenant de trier mon tableau par paramètre :
    si j'ai une méthode avec deux paramètres 'aaa' et 'zzz' elle sera affichée avant la méthode avec les paramètres 'bbb' et 'truc'.
    Si j'utilise la requête précédente en faisant un order by p.id, les m.id se retrouvent logiquement éparpillés dans les tuples résultants. Et donc mon algo ne marche plus. Et je peux difficilement parcourir les autres tuples à la recherche des autres paramètres, car les tables font plusieurs millions de tuples...

    Une idée ?
    Trier la requête par méthode (majeur) puis paramètre (mineur ) peut être ... ?


    Soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT ...
    ORDER BY M.ID, P.ID

  3. #3
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT m.id, p.par
    FROM dvp_methode m, dvp_parametre p,
        (SELECT m.id, MIN(p.par) AS premier
         FROM dvp_methode m, dvp_parametre p
         WHERE m.id = p.id
         GROUP BY m.id) o
    WHERE m.id = p.id(+)
      AND m.id = o.id(+)
    ORDER BY o.premier, m.id, p.id;
    L'ordre est défini par le plus petit paramètre de chaque méthode, puis la méthode, puis le paramètre.
    Les méthodes sans paramètre se retrouvent à la fin ; en remplaçant l'ORDER BY par "ORDER BY nvl(o.premier, ' '), m.id, p.id", les méthodes sans paramètre se retrouvent au début..
    J'ai repris ta syntaxe pour les jointures externes.

  4. #4
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Luc Orient
    Trier la requête par méthode (majeur) puis paramètre (mineur ) peut être ... ?


    Soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT ...
    ORDER BY M.ID, P.ID
    Erreur ! en effet, les méthodes seront bien groupées, mais ma liste sera triée par ordre de méthode, pas par paramètre....

  5. #5
    Candidat au Club
    Inscrit en
    Avril 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Médiat
    Essaye :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT m.id, p.par
    FROM dvp_methode m, dvp_parametre p,
        (SELECT m.id, MIN(p.par) AS premier
         FROM dvp_methode m, dvp_parametre p
         WHERE m.id = p.id
         GROUP BY m.id) o
    WHERE m.id = p.id(+)
      AND m.id = o.id(+)
    ORDER BY o.premier, m.id, p.id;
    L'ordre est défini par le plus petit paramètre de chaque méthode, puis la méthode, puis le paramètre.
    Les méthodes sans paramètre se retrouvent à la fin ; en remplaçant l'ORDER BY par "ORDER BY nvl(o.premier, ' '), m.id, p.id", les méthodes sans paramètre se retrouvent au début..
    J'ai repris ta syntaxe pour les jointures externes.
    En effet, ça marche très bien. J'avais fait la même chose, mais en créant une vue. Ta méthode sera plus facile à généraliser qu'avec une création de vue.
    Je me demandais si l'on ne pouvais pas le faire en un seul select...
    Mais je demande peut-être beaucoup
    Dans tous les cas, merci beaucoup pour votre aide.

    Christophe

  6. #6
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par roychris
    Erreur ! en effet, les méthodes seront bien groupées, mais ma liste sera triée par ordre de méthode, pas par paramètre....
    Quelque chose doit m'échapper sans doute, mais je pensais vraiment que l'on pouvait trier les lignes résultantes d'une requête sur plusieurs colonnes ...

    C'est à dire que les lignes seront triées par identifiant de méthode ET par identifiant de paramètre ...
    Pour des lignes ayant même identifiant de méthode, elles seront présentées dans l'ordre des identifiants de paramètre ...

  7. #7
    Inactif   Avatar de Médiat
    Inscrit en
    Décembre 2003
    Messages
    1 946
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 946
    Points : 2 227
    Points
    2 227
    Par défaut
    Citation Envoyé par Luc Orient
    Quelque chose doit m'échapper sans doute, mais je pensais vraiment que l'on pouvait trier les lignes résultantes d'une requête sur plusieurs colonnes ...
    Bien sur on peut, mais ce n'est pas ce que veut roychris.

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

Discussions similaires

  1. Porblème de tri sur des semaines
    Par bob75000 dans le forum Access
    Réponses: 3
    Dernier message: 24/07/2006, 15h15
  2. Réponses: 3
    Dernier message: 15/06/2006, 12h03
  3. tri sur des champs calculés
    Par Thib dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/10/2005, 17h24
  4. Recherche et tri sur des doublons XSLT
    Par MusSDev dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 01/06/2005, 09h27

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