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

SQL Oracle Discussion :

Un SELECT d'un SELECT contenant un ORDER BY peut-il changer le tri initial ?


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Par défaut Un SELECT d'un SELECT contenant un ORDER BY peut-il changer le tri initial ?
    Bonjour à tous,

    Je suis sous Oracle 10g. Je souhaiterais savoir si un SELECT fait sur un SELECT contenant une clause ORDER BY peut changer le tri initial.

    Plus concrètement, voici ce que j'essaie de faire :

    Ex. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SELECT code, libelle FROM (
      SELECT DISTINCT * FROM (
        SELECT code, libelle, 1 AS tri FROM matable1
        UNION 
        SELECT code, libelle, 2 AS tri FROM matable2
        UNION 
        SELECT code, libelle, 2 AS tri FROM matable3
      ) ORDER BY code, tri
    );
    Je fais plusieurs SELECT en UNION avec un champ TRI que j'initialise dans chaque requête. Les 2 dernières requêtes peuvent retourner le même enregistrement, auquel cas, je ne souhaite en conserver qu'un, d'où le TRI ayant la même valeur (= 2) dans ce cas.

    Ma question est donc : le SELECT qui interroge le SELECT DISTINCT trié va-t-il me retourner un résultat sans changer le tri du SELECT DISTINCT ou bien au contraire cela peut-il se produire ?

    Merci d'avance pour votre aide.

    Bonne journée.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Pas d'order by égal aucune garantie pour le tri.

  3. #3
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Bonjour,


    L'ordre de SELECT interne sera conservé.

    En plus, "DISTINCT *" est inutile dans votre code car vous utilisez UNION qui (contrairement à UNION ALL) élimine les doublons.


    Cordialement,

  4. #4
    Membre expérimenté Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Par défaut
    Ah non, pardon j'ai dit n'importe quoi

    Finalement en absence de ORDER BY le comportement sera aléatoire.

    Voici un lien vers la documentation oracle qui confirme ce sujet

    http://docs.oracle.com/javadb/10.8.2...sqlj13658.html
    ...
    An ORDER BY clause allows you to specify the order in which rows appear in the result set. In subqueries, the ORDER BY clause is meaningless unless it is accompanied by one or both of the result offset and fetch first clauses or in conjunction with the ROW_NUMBER function, since there is no guarantee that the order is retained in the outer result set.
    ...

    Cordialement,

  5. #5
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 137
    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 137
    Par défaut
    Et pourquoi pas tout simplement :
    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
        SELECT  code
            ,   libelle
            ,   1 AS tri 
        FROM    matable1
    UNION 
        SELECT  code
            ,   libelle
            ,   2 AS tri
        FROM    matable2
    UNION 
        SELECT  code
            ,   libelle
            ,   2 AS tri
        FROM    matable3
    ORDER BY code
        ,   tri
    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.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Âge : 57
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Janvier 2005
    Messages : 66
    Par défaut
    Bonjour à tous,

    Merci pour vos réponses rapides.

    dariyoosh, tu as tout à fait raison, le DISTINCT n'est pas du tout nécessaire et sa suppression résoud mon problème !

    Bonne journée à tous et encore merci.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 22/03/2011, 18h14
  2. Réponses: 9
    Dernier message: 06/02/2009, 16h53
  3. [firebird] sous select dans un select
    Par gdido dans le forum SQL
    Réponses: 2
    Dernier message: 14/05/2004, 10h57
  4. [Sybase] Select dans une select loop en C
    Par Claudio dans le forum Sybase
    Réponses: 2
    Dernier message: 29/04/2003, 19h06

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