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 :

Problème requête avec UNION et ORDER BY


Sujet :

Langage SQL

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 56
    Points : 51
    Points
    51
    Par défaut Problème requête avec UNION et ORDER BY
    Bonjour,

    Je dispose des tables suivantes sous Mysql et/ou Postgresql:

    http(id, source, destination, ..., date)
    ftp(id, source, destination, ..., date)

    Je souhaite afficher toutes les entrées des http et ftp triées par date.
    Pour afficher toutes les entrées, je fais une UNION :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT http.source, http.destination, http.date FROM http
    UNION
    SELECT ftp.source, ftp.destination, ftp.date FROM ftp;
    Mais je ne sais pas comment placer un ORDER BY pour trier selon la date.

    Merci d'avance pour votre aide.

  2. #2
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT source, destination, date 
    FROM http 
    ORDER BY date
    UNION 
    SELECT source, destination, date 
    FROM ftp
    ORDER BY date;
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Aïe, je crois que je me suis mal exprimé. Les entrées http et ftp doivent être triés ensemble par date, et non pas séparément...

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    c'est bien mais ce ne marche pas ....

    voici la marche a suivre si je ne m'abuse :

    prenons l ex suivant :

    Vendeur (id_v, nom_v)
    Acheteur (id_a, nom_a)

    la reponse est :

    Select * from ( ….. ) R order by R.nom

    Avec … :

    select id_a id, nom_a nom from acheteur
    Union
    Select id_v id, nom_v nom from vendeur

    -> ca te renvoie une table : (id, nom) que l on renomme R dans la 1ere requette que l on peut ordonner facilement

    voila voila

  5. #5
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par MashiMaro
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    SELECT source, destination, date 
    FROM http 
    ORDER BY date
    UNION 
    SELECT source, destination, date 
    FROM ftp
    ORDER BY date;
    Est ce que tu as seulement testé !!!!! Chez moi ca marche





    Pour otb82 : avec plus de 100 messages a ton compteur, tu ne connais toujours pas les règles du forum ????
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    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
     
    Erreur
     
    requête SQL :  
     
    SELECT http.source, http.destination, http.date
    FROM http
    ORDER BY http.date
    UNION 
    SELECT ftp.source, ftp.destination, ftp.date
    FROM ftp
    ORDER BY ftp.date
    LIMIT 0 , 30 
     
    MySQL a répondu:
     
     
    #1221 - Wrong usage of UNION and ORDER BY
    Peut être y a-t-il une erreur de ma part?

  7. #7
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Je crois que le soucis vient plus de l'interprétation du SQL par MySQL que du code SQL lui-même.

    Va poser la question sur le forum MySQL, je pense que tu auras plus de réponse.

    Personnellement, j'ai testé ma requête telle qu'elle sur Sybase et Access et je n'ai aucun soucis.

    NB : sinon, essaie sans le LIMIT et en virant les noms de table devant les colonnes qui ne sont pas necessaires. On en sait jamais. Ca donne toujours pareil ?
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Effectivement, je pense que le problème vient bien de Mysql, je vais tenter la chose sous Postgresql.
    Pour le LIMIT, c'est Mysql qui le rajoute.
    Je poursuis le topic sur le forum Mysql.

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2003
    Messages : 42
    Points : 39
    Points
    39
    Par défaut
    juste maintient ce que je dis :
    la solution que tu propose (MashiMaro) ne me semble pas correct !

    La syntaxe est bonne, mais le resultat obtenu,
    n'est pas le resultat espéré ...

    Ta requete concatene le resultat de 2 table PREALABLEMENT triees
    le trie ne s effectue pas au bon moment.

    "Personnellement, j'ai testé ma requête telle qu'elle sur Sybase et Access et je n'ai aucun soucis. "

    c'est bizzard ...

  10. #10
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Citation Envoyé par otb82
    juste maintient ce que je dis :
    la solution que tu propose (MashiMaro) ne me semble pas correct !
    Elle ne te semble par correcte ??? Mais l'as-tu testée ?

    L'UNION est reflexif, il mélange les deux SELECT sans prêter attention à l'ordre.

    Maintenant, ceci fonctionne aussi car c'est la norme SQL2, tu peux essayer sous MySQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT source, destination, date 
    FROM http 
    UNION 
    SELECT source, destination, date 
    FROM ftp 
    ORDER BY date;
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 56
    Points : 51
    Points
    51
    Par défaut
    Je viens de faire le test sur Postgresql, et effectivement je m'épargne les messages d'erreur pour un code sql invalide.

    MashiMaro, j'ai testé ta solution, mais chez moi, ça ne passe pas...
    Otb82, ta méthode est correcte.
    Au final, on obtient donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT * FROM
    (SELECT http.source, http.destination, http.date FROM http
    UNION
    SELECT ftp.source, ftp.destination, ftp.date FROM ftp) AS tmp
    ORDER BY tmp.date;

  12. #12
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Je ne m'y ferai jamais aux particularités de MySQL
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

  13. #13
    Membre actif
    Avatar de MashiMaro
    Profil pro
    Inscrit en
    Février 2003
    Messages
    180
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 180
    Points : 213
    Points
    213
    Par défaut
    Et une derniere chose,

    MySQL ne supporte pas les requêtes imbriquées.
    MashiMaro

    L'homme sage apprend de ses erreurs, l'homme très sage apprend des erreurs des autres.

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

Discussions similaires

  1. Réponses: 11
    Dernier message: 11/02/2013, 14h23
  2. Problème requête avec access
    Par celiaaa dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 29/05/2007, 12h40
  3. "not null" avec union et order by
    Par cauriera dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/01/2007, 16h14
  4. Problème requête avec 2 conditions
    Par omgirl dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/07/2006, 16h19
  5. Problème requête avec group by et distinct
    Par tomca dans le forum Langage SQL
    Réponses: 2
    Dernier message: 20/07/2005, 16h10

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