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 :

Comment faire une requête minus une autre avec un Order by ?


Sujet :

SQL Oracle

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Comment faire une requête minus une autre avec un Order by ?
    Bonjour,


    Je suis en train de réaliser une requete de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select col_1, col_2, col_3 from table_1 minus
    select col_1, col_2, col_3 from table_2;
    Je voudrais rajouter un order by sur le résultat de cette requete.

    Malheureusement j'obtiens une erreur pour une requete de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    select col_1, col_2, col_3 from table_1 ORDER BY col_2 minus
    select col_1, col_2, col_3 from table_2 ORDER BY col_2;
    Erreur :
    ORA-00933: La commande SQL ne se termine pas correctement
    Pourtant individuellement les 2 requetes sans le minus sont OK avec order by.

    Comment avoir un order by dans une requete avec minus ?

    Merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    quelque chose dans ce goût :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select col_1, col_2, col_3 
    from (
        SELECT col_1, col_2, col_3 FROM table_1 minus
        SELECT col_1, col_2, col_3 FROM table_2 ) as REQ
    ORDER BY col_2

  3. #3
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 460
    Points : 8 073
    Points
    8 073
    Par défaut
    Il n'y a même pas besoin de sous-requête, il suffit de ne mettre l'ORDER BY qu'à la suite de la dernière requête du MINUS. Ça se comportera tout à fait comme avec la sous-requête explicite.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select1
    MINUS
    select2
    MINUS
    select3
    ORDER BY ...
    L'impossibilité de mettre ORDER BY ailleurs qu'à la fin a une certaine logique : ce qui nous intéresse, c'est que le résultat final soit trié. Ca n'a effectivement aucun intérêt de trier les requêtes individuelles, puisque dans le contexte d'un MINUS, on n'en verra jamais le résultat.
    Mais on aurait pu espérer qu'Oracle se contente d'ignorer l'ORDER BY inutile sans autre forme de procès...
    Consultant / formateur Oracle indépendant
    Certifié OCP 12c, 11g, 10g ; sécurité 11g

    Ma dernière formation Oracle 19c publiée sur Linkedin : https://fr.linkedin.com/learning/oracle-19c-l-administration

  4. #4
    Battosaiii
    Invité(e)
    Par défaut
    Merci pour vos réponses,

    J'obtiens des erreurs pour ces differentes solutions :

    Pomalaix:
    J'ai tenté d'éxécuter une solution de type :
    select col1,col2,etc...
    MINUS
    select col1,col2,etc...
    ORDER BY col1

    mais il ya cette erreur :

    ORA-00904: "DOC"."NOIP" : identificateur non valide
    Pourtant l'identificateur est correcte j'ai bien vérifier.


    7gyY9w1ZY6ySRgPeaefZ :Ta solution me donne aussi une erreur :

    ORA-00933: La commande SQL ne se termine pas correctement
    Pourtant j'ai bien vérifier que mes requetes sont formées comme tu l'as dit.

    Comment puis je corriger ces erreurs ?

    Merci

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    J'ai utilisé la solution de Pomalaix mais en ajoutant a la fin la position de la colonne.

    La solution est de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select1
    MINUS
    select2
    MINUS
    select3
    ORDER BY 4;
    Merci a tous
    Dernière modification par al1_24 ; 10/08/2011 à 17h29. Motif: Balises [CODE]

  6. #6
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    oui, il faut toujours employer la position !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select 1 x, 2 y from dual MINUS
         select 3  , 4 x from dual MINUS
         select 5  , 6   from dual
         order by x
     
             X          Y
    ---------- ----------
             1          2
    fonctionne, mais pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SQL> select 1 x, 2 y from dual MINUS
         select 3  , 4   from dual MINUS
         select 5  , 6   from dual
         order by x;
     
    Error at line 4
    ORA-00904: "X": invalid identifier

  7. #7
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Laurent
    Qu’est-ce que tu veux dire par ton exemple ? Est-ce que j'ai raté quelque chose ?
    Ni la position ne fonctionne pas toujours:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    SQL> r
      1  SELECT 1 x, 2 y FROM dual MINUS
      2  SELECT 3  , 4 x FROM dual MINUS
      3  SELECT 5  , 6   FROM dual
      4* ORDER BY 1;
    ORDER BY 1;
              *
    ERREUR à la ligne 4 :
    ORA-00911: caractère non valide

  8. #8
    Expert confirmé
    Avatar de laurentschneider
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2005
    Messages
    2 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2005
    Messages : 2 944
    Points : 4 926
    Points
    4 926
    Par défaut
    tu as un point-virgule de trop

    ce que je veux dire c'est que si l'avant-dernière sous-requête de l'opération de set ne contient pas l'alias de la colonne de tri dans une de ses colonnes ça ne marche pas. En gros c'est un bug...

  9. #9
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par laurentschneider Voir le message
    ce que je veux dire c'est que si l'avant-dernière sous-requête de l'opération de set ne contient pas l'alias de la colonne de tri dans une de ses colonnes ça ne marche pas. En gros c'est un bug...
    C'est OK. Merci.

Discussions similaires

  1. Réponses: 3
    Dernier message: 09/10/2015, 18h16
  2. [AC-2010] Comment faire un filtre dans une requête
    Par Snakes1 dans le forum Access
    Réponses: 1
    Dernier message: 01/05/2013, 04h31
  3. Réponses: 1
    Dernier message: 30/08/2011, 10h53
  4. Réponses: 2
    Dernier message: 01/12/2008, 19h43
  5. faire une requête sur une table d'un autre schéma
    Par kineton dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 10/04/2008, 16h08

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