Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 10/08/2011, 15h01   #1
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
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 :
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 :
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 :
Citation:
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
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 15h05   #2
Expert Confirmé
 
Avatar de 7gyY9w1ZY6ySRgPeaefZ
 
Homme
dba
Inscription : juillet 2007
Messages : 2 520
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Canada

Informations professionnelles :
Activité : dba

Informations forums :
Inscription : juillet 2007
Messages : 2 520
Points : 3 967
Points : 3 967
quelque chose dans ce goût :
Code :
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
__________________
les règles du forum - mode d'emploi du forum
Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs.
(Rappel : "ça ne marche pas" n'est pas un message d'erreur)
JE NE RÉPONDS PAS aux questions techniques par message privé.
Écrire en français sur un forum est une marque minimale de respect.
7gyY9w1ZY6ySRgPeaefZ est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 15h34   #3
Rédacteur
 
Inscription : décembre 2002
Messages : 2 387
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 387
Points : 3 265
Points : 3 265
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 :
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 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 15h49   #4
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
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 :

Citation:
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 :

Citation:
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
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 16h09   #5
Membre actif
 
Inscription : mai 2004
Messages : 725
Détails du profil
Informations forums :
Inscription : mai 2004
Messages : 725
Points : 193
Points : 193
J'ai utilisé la solution de Pomalaix mais en ajoutant a la fin la position de la colonne.

La solution est de type :

Code :
1
2
3
4
5
6
select1
MINUS
select2
MINUS
select3
ORDER BY 4;
Merci a tous
Battosaiii est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 18h48   #6
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
oui, il faut toujours employer la position !

Code :
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 :
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
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 10h31   #7
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 810
Points : 5 810
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 :
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
mnitu est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 13h07   #8
Expert Confirmé Sénior


 
Avatar de laurentschneider
 
Homme Laurent Schneider
Administrateur de base de données
Inscription : décembre 2005
Messages : 2 925
Détails du profil
Informations personnelles :
Nom : Homme Laurent Schneider
Localisation : Suisse

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

Informations forums :
Inscription : décembre 2005
Messages : 2 925
Points : 4 547
Points : 4 547
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...
__________________
Mon blog : laurentschneider.com
Mon livre : Advanced Oracle SQL Programming
laurentschneider est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/08/2011, 13h53   #9
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
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 : 3 311
Points : 5 810
Points : 5 810
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.
mnitu est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h55.


 
 
 
 
Partenaires

Hébergement Web