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 :

Cohabitation des requêtes UNION et des ORDER BY ?


Sujet :

Langage SQL

  1. #1
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut Cohabitation des requêtes UNION et des ORDER BY ?
    Bonjour

    j'ai une reqûete UNION qui rassemble 2 requêtes SELECT simples, mais pour lesquelles le ORDER BY n'est pas le même.
    Ce qui est curique, c'est que le second ORDER BY n'est jamais pris en compte, quelle que soit la clause que j'indique.
    Quelqu'un saurait-il pourquoi ?

    Voici la requête en question :
    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 ORDRE, Info, SENSIB_07, SENSIB_06, SENSIB_01, SENSIB_02, SENSIB_05 
    FROM sensib_synth 
    LEFT JOIN __sensib_synth_info ON sensib_synth.info = __sensib_synth_info.LIBELLE 
    WHERE 1 
    and cast(VALUATION_DATE as date) = '2006-12-06' 
    and KARBRE = 2 
    ORDER BY ORDRE ASC) 
    UNION ALL 
    (SELECT 99 AS ORDRE, KDEVISE, sum(SENSIB_07), sum(SENSIB_06), sum(SENSIB_01), sum(SENSIB_02), sum(SENSIB_05) 
    FROM sensib_book_cat 
    WHERE 1 
    and cast(VALUATION_DATE as date) = '2006-12-06' 
    and KARBRE = 2 
    GROUP BY KDEVISE 
    ORDER BY KDEVISE DESC);
    la dernière ligne (order by kdevise) n'est jamais prise en compte.

    Merci d'avance

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    Merci de respecter les règles du forum et d'indiquer votre SGBD ainsi que sa version.
    Sous Oracle, vous ne pouvez spécifier une clause ORDER BY qu'à la fin de la requête UNION et elle semble s'appliquer aux données récupérées par toutes les requêtes de cette union :
    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
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    10g SOC5> select *
      2  from t1;
     
             N
    ----------
             1
             1
             3
             5
     
    4 ligne(s) sélectionnée(s).
     
    10g SOC5> select *
      2  from t2;
     
             N
    ----------
             2
             4
             6
             8
     
    4 ligne(s) sélectionnée(s).
     
    10g SOC5> select n
      2  from t1
      3  order by n desc
      4  union
      5  select n
      6  from t2
      7  order by n asc;
    union
    *
    ERROR à la ligne 4 :
    ORA-00933: la commande SQL ne se termine pas correctement
     
    10g SOC5> select n
      2  from t1
      3  union
      4  select n
      5  from t2
      6* order by n asc
     
             N
    ----------
             1
             2
             3
             4
             5
             6
             8
     
    7 ligne(s) sélectionnée(s).
     
    10g SOC5> select n
      2  from t1
      3  union
      4  select n
      5  from t2
      6* order by n desc
     
             N
    ----------
             8
             6
             5
             4
             3
             2
             1
     
    7 ligne(s) sélectionnée(s).

  3. #3
    Membre éprouvé

    Inscrit en
    Janvier 2006
    Messages
    969
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 969
    Points : 958
    Points
    958
    Par défaut
    Merci de ta réponse. J'ai en effet omis de préciser que j'utiliser MySQL 5.0
    Si on ne peut pas mettre plus d'un ORDER BY, je vais être bien embêté.

  4. #4
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut ORDER BY doit être unique
    La clause ORDER BY doit être unique pour l'ensemble de la requête quel que soit le SGBD.

Discussions similaires

  1. Réponses: 1
    Dernier message: 27/04/2012, 16h41
  2. Des macros pour lancer des requêtes avec paramètres
    Par elsergio dans le forum Requêtes
    Réponses: 8
    Dernier message: 17/10/2011, 17h46
  3. Réponses: 1
    Dernier message: 28/02/2008, 08h17
  4. Valeur des formulaire réutilisées dans des requètes SQL.
    Par cotmar dans le forum Requêtes et SQL.
    Réponses: 6
    Dernier message: 09/05/2006, 10h16
  5. Créer une vue avec des requêtes UNION ?
    Par webtheque dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/04/2005, 12h37

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