Précédent   Forum des professionnels en informatique > Bases de données > Langage SQL
Langage SQL Forum d'entraide sur le langage SQL et sur les questions liées à la conception de schéma (DDL). Cours SQL
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 26/05/2011, 13h53   #1
Invité de passage
 
nathalie muelas
Inscription : janvier 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : nathalie muelas

Informations forums :
Inscription : janvier 2011
Messages : 14
Points : 3
Points : 3
Par défaut Tri de deux requêtes unies

Bonjour,
J'ai deux requêtes avec un union, avec dans chacune des requête une date. Je voudrais ordonner mes résultats par ordre chronologique, de façon à ce que les lignes de résultats des deux requêtes s'imbriquent. Je ne sais pas si je suis très claire. J'ai donc écrit la requête sql suivante :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
(
  (
    SELECT nom, date1,... 
    FROM table1 WHERE ...
  ) 
  union  
  (
    SELECT libelle, date2,... 
    FROM tables2 
    WHERE ...
  ) 
  ORDER BY date1, date2
)
Or, la syntaxe est fausse au niveau de l'order by. Mais j'ignore comment m'y prendre.
Peut-être quelqu'un pourrait m'éclairer?
Cordialement, guznat
guznat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 14h13   #2
Modérateur
 
Homme Fabien
Ingénieur d'études en décisionnel
Inscription : septembre 2008
Messages : 5 684
Détails du profil
Informations personnelles :
Nom : Homme Fabien
Âge : 34
Localisation : France, Yvelines (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études en décisionnel
Secteur : Arts - Culture

Informations forums :
Inscription : septembre 2008
Messages : 5 684
Points : 10 434
Points : 10 434
Envoyer un message via ICQ à Waldar Envoyer un message via Skype™ à Waldar
Deux choses :
  1. vous avez trop de parenthèses
  2. vous pouvez trier sur le numéro de colonne
Donc :
Code :
1
2
3
4
5
6
7
8
SELECT nom, date1,... 
  FROM table1
 WHERE ...
 UNION
SELECT libelle, date2,... 
  FROM tables2 
 WHERE ...
 ORDER BY 2
__________________
Email : http://scr.im/waldar
Waldar est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 14h13   #3
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 003
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 003
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
Avec ta requête UNION, et en ne considérant que les deux premières colonnes que tu donnes, la colonne "nom" de la première requête va fusionner avec la colonne "libelle" de la seconde requête et la colonne "date1" de la première requête va fusionner avec la colonne "date2" de la seconde requête.

Les parenthèses sont inutiles, sauf si, comme je le comprends, tu veux classer toute la colonne date. Il faut alors faire un SELECT sur l'ensemble de la requête UNION pour faire le ORDER BY :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
SELECT nom, date1
FROM
(
    SELECT nom, date1,... 
    FROM table1 
    WHERE ...
 
    UNION  
 
    SELECT libelle, date2,... 
    FROM tables2 
    WHERE ...
) temp 
ORDER BY date1
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 14h32   #4
Invité de passage
 
nathalie muelas
Inscription : janvier 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : nathalie muelas

Informations forums :
Inscription : janvier 2011
Messages : 14
Points : 3
Points : 3
Citation:
Envoyé par CinePhil Voir le message
Avec ta requête UNION, et en ne considérant que les deux premières colonnes que tu donnes, la colonne "nom" de la première requête va fusionner avec la colonne "libelle" de la seconde requête et la colonne "date1" de la première requête va fusionner avec la colonne "date2" de la seconde requête.
En fait, je voudrais qu'à chaque ligne de la requete1, j'ai un champ libelle et date2 qui se créé, mais vide et inversement pour la requete2. c'est destiné à remplir un datagrid avec quatre champs grâce à un boucle while.
guznat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 14h37   #5
Modérateur
 
Avatar de CinePhil
 
Homme Philippe Leménager
Ingénieur d'études en informatique
Inscription : août 2006
Messages : 11 003
Détails du profil
Informations personnelles :
Nom : Homme Philippe Leménager
Âge : 48
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur d'études en informatique
Secteur : Enseignement

Informations forums :
Inscription : août 2006
Messages : 11 003
Points : 18 265
Points : 18 265
Envoyer un message via MSN à CinePhil
Alors si tu veux conserver les 4 colonnes, il faut les simuler dans les deux sous-requêtes :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
SELECT nom, date1, libelle, date2
FROM
(
    SELECT nom, date1, '' AS libelle, '' AS date2
    FROM table1 WHERE ...
 
    UNION  
 
    SELECT '' AS nom, '' AS date1, libelle, date2,... 
    FROM tables2 
    WHERE ...
) temp 
ORDER BY date1, date2
Mais si tes tables peuvent être associées par une colonne ou un ensemble de colonnes, il serait sans doute judicieux de préférer une jointure !
__________________
Philippe Leménager. Ingénieur d'étude à l'École Nationale de Formation Agronomique.
Mon blog sur la conception des BDD, le langage SQL, le PHP avec Zend Framework...
« Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
À la maison comme au bureau, j'utilise Mandriva Linux ou Mageïa ! Soutenons l'industrie logicielle française !
Linuxiens, comptez-vous !
CinePhil est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 26/05/2011, 16h00   #6
Invité de passage
 
nathalie muelas
Inscription : janvier 2011
Messages : 14
Détails du profil
Informations personnelles :
Nom : nathalie muelas

Informations forums :
Inscription : janvier 2011
Messages : 14
Points : 3
Points : 3
Citation:
Envoyé par CinePhil Voir le message
Mais si tes tables peuvent être associées par une colonne ou un ensemble de colonnes, il serait sans doute judicieux de préférer une jointure !
En fait, dans un souci de simplification, je n'avais pas mis les deux requêtes en entier, elles contiennent chacune des jointures internes.
En tout cas, votre solution fonctionne, je vous remercie.
Cordialement, guznat
guznat est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 16h39   #7
Membre Expert
 
Inscription : janvier 2010
Messages : 1 084
Détails du profil
Informations personnelles :
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : janvier 2010
Messages : 1 084
Points : 1 573
Points : 1 573
Bonjour

Citation:
Envoyé par CinePhil Voir le message
Les parenthèses sont inutiles, sauf si, comme je le comprends, tu veux classer toute la colonne date.
Il me semble que même dans ce cas, elles sont inutiles et que l'on peut faire :

Code :
1
2
3
4
5
6
7
8
SELECT nom, date1,... 
FROM table1 
WHERE ...
UNION  
SELECT libelle, date2,... 
FROM tables2 
WHERE ...
ORDER BY date1
aieeeuuuuu est dé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 16h47.


 
 
 
 
Partenaires

Hébergement Web