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 Firebird Discussion :

Est-ce que la clause ORDER BY n'est pas utilisée avec UNION


Sujet :

SQL Firebird

  1. #1
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    Par défaut Est-ce que la clause ORDER BY n'est pas utilisée avec UNION
    Bonjour à tous,

    J'arrive pas a exécuter une requette SQL interbase contenat une clause ORDER BY avec UNION :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    select * from fichier1
    union
    select * from fichier1
    where condition1
    order by chps1
    - Les fichiers (Fichier1 et fichier2) ont exactement la même structure
    - la clause ORDER BY est utilisée à la fin de la requette

    NB. Sans ORDER BY, la requette s'execute sans problème.

  2. #2
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Dans votre exemple il n'y a pas de fichier2.

    Faute de frappe sans doute,

    Il faut éviter les select * ensuite pour ce qui est du tri suite à un union il faut lui indiquer non pas le nom de la colonne mais son numéro.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select chps1 
      from fichier1 
    union 
    select chps1 
      from fichier1 
      where condition1 
    order by 1;
    Mais cette exemple est exactement l'équivallent de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    select chps1 
      from fichier1 
    union 
    select chps1 
      from fichier1 
      where condition1;
    Car en effet le union enlevant les doublons il tri les données dans l'ordre des colonnes. Donc si vous ne voulez pas utiliser le order by N°de colonne vous n'avez qu a mettre dans vos select les colonnes que vous souhaitez trier en premier.
    C'est d'ailleur recommandé de le faire pour éviter un double traitement (Le tri de l'union puis le tri de l'order by (si celui ci est un order by n avec n>1)).

    Pour un "UNION ALL" il faudra par contre utiliser le order by x pour trier le résultat.

  3. #3
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut Re: Est-ce que la clause ORDER BY n'est pas utilisée avec UN
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select * 
    FROM (
    select * from fichier1
    union
    select * from fichier1
    where condition1
    ) R
    Order By 1

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  4. #4
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut Re: Est-ce que la clause ORDER BY n'est pas utilisée avec UN
    Citation Envoyé par WOLO Laurent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    select * 
    FROM (
    select * from fichier1
    union
    select * from fichier2
    where condition1
    ) R
    Order By 1
    : :

    1- qu'apporterait de plus cette solution par rapport à un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
      select *
        from fichier1 
    union 
      select * 
        from fichier1 
        where condition1 
    order by 1;
    ?
    2- De plus les sous select n'étant pas autorisés avec Interbase/Firebird celà ne fonctionnera pas.

  5. #5
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Ah !
    Je ne me rendais plus compte qu'Interbase était encore à l'âge de la pièrre taillée alors que même mysql s'en est tiré de cette situation.

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  6. #6
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Ce n'est pas très diplomate de venir dans le forum Interase/Firebird pour dire que c'est un "SGBD de l'age de pierre".

    MySQL sait il exécuter des procédures stoquées ? sait il gérer les triggers ? Gère t il le versionning des enregistrements ? Entre autres questions...

    Le SGBD parfait n'existe pas, il faut choisir celui qui convient le plus à ses besoins et affinitées.

    Pour faire des sous select avec interbase/Firebird c'est assez simple en utilisant les vues ou dans une procédure stoquées.

    Mais vous n'avez pas répondu à ma première question ???
    Qu'apporte de plus votre solution ?
    Enfin je pose la question, mais pour être honnete, je connais la réponse

  7. #7
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    Vous voyez très bien que dans votre requête, le resultat est l'union du premier select + le deuxième avec le fait le resultat du deuxième est trié.

    Par contre, dans ma version, Le resultat de l'union est trié sur le champ 1.
    Vous vous rendez vraiment compte que c'est different sinon éclairer moi maître Barbibulle !

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  8. #8
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    C'est là que vous faites erreur, le order by se réfère à l'ensemble de l'union.
    http://sql.developpez.com/sqlaz/ensembles/#L3.4.4

    En d'autre terme quand il y a un UNION, il ne peut y avoir qu'un seul ORDER BY et il se trouve à la fin. Il ne se réfère pas au dernier select mais au résultat de l' (ou des) union(s).

    Ma requete va bien trier comme il le faut.

    Et la votre donne le même résultat sur un SGBD qui accepte les sous select mais l'écriture est plus lourde et probablement moins performante.

  9. #9
    Rédacteur
    Avatar de WOLO Laurent
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Mars 2003
    Messages
    2 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Congo-Brazzaville

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 2 741
    Points : 4 414
    Points
    4 414
    Par défaut
    sauf qu'ici il s'agit d'un Order by mais pas un group by.
    A mois que ca soit la même chose ?

    Découvrez la FAQ de MS SQL Server.
    La chance accorde ses faveurs aux esprits avertis !

  10. #10
    Membre expert
    Avatar de Barbibulle
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    2 048
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 2 048
    Points : 3 342
    Points
    3 342
    Par défaut
    Désolé il faut lire dans mon message précédent ORDER BY et non GROUP BY. Merci de la remarque, je vais éditer mon message pour éviter les confusions.

  11. #11
    Futur Membre du Club
    Inscrit en
    Mai 2002
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 19
    Points : 9
    Points
    9
    Par défaut
    Merci à tous ceux qui m'ont répendu,

    Je m'excuse pour l'erreur de frappe fichier2.

    J'est utilisé la solution de vue proposé dans le forum et ça à marcher.

    Merci Barbecule j'ai utilisé aussi ta solution qui est plus simple.

    Merci encore.

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

Discussions similaires

  1. [MySQL] est ce que l'emplacement de la requete est la cause de l'erreur
    Par info_sara dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 13/06/2008, 14h41
  2. Réponses: 1
    Dernier message: 17/03/2008, 17h16
  3. Réponses: 0
    Dernier message: 28/02/2008, 16h43
  4. est-ce que la clause AND IF existe?
    Par dirtyjs dans le forum Langage SQL
    Réponses: 2
    Dernier message: 14/10/2006, 23h46
  5. Réponses: 8
    Dernier message: 07/06/2006, 10h49

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