Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

UNION sans tri

7 réponses
Avatar
le Nordiste
Bonjour,

J'ai trois tables T_1, T_2 et T_3 avec le m=EAme nombre de champs
( sinon UNION impossible).

Je veux faire quelque chose comme :

(SELECT T_1.* FROM T_1=85=85
UNION
SELECT T_2.* FROM T_2=85=85
ORDER BY T_1.champ_1)
UNION
SELECT T_3.* FROM T_3=85=85

C'est =E0 dire faire l'union ordonn=E9e des deux premi=E8res tables,
puis faire l'union avec la 3=E9me table, SANS retrier le r=E9sultat.

Merci pour votre aide,

7 réponses

Avatar
db
Le 23/09/2010 16:10, le Nordiste a écrit :
Bonjour,

J'ai trois tables T_1, T_2 et T_3 avec le même nombre de champs
( sinon UNION impossible).

Je veux faire quelque chose comme :

(SELECT T_1.* FROM T_1……
UNION
SELECT T_2.* FROM T_2……
ORDER BY T_1.champ_1)
UNION
SELECT T_3.* FROM T_3……

C'est à dire faire l'union ordonnée des deux premières tables,
puis faire l'union avec la 3éme table, SANS retrier le résultat.

Merci pour votre aide,




Voici une proposition : ajouter une constante dans le select :

SELECT "A" AS TRI,T_1.* FROM T_1
UNION
SELECT "A" AS TRI,T_2.* FROM T_2
UNION
SELECT "B" AS TRI,T_3.* FROM T_3
ORDER BY TRI,champ_1

les deux tables T1 et T2 devraient bien apparaître au début, triée sur
le champ 1, ...mais la 3ème table sera aussi triée sur le champ1.

db
Avatar
le Nordiste
C'est une solution, je vais tester…
Je pensais pouvoir résoudre ce probléme par la BONNE syntaxe.

Merci du coup de main.
Avatar
db
Le 23/09/2010 16:56, le Nordiste a écrit :
C'est une solution, je vais tester…
Je pensais pouvoir résoudre ce probléme par la BONNE syntaxe.



(Sur l'air de "Il est pas frais mon poisson") : elle est pas bonne, ma
syntaxe ? :-)

Plaisanterie à part, je ne suis pas sûr qu'il existe une bonne syntaxe
pour trier une UNION avant d'en rajouter une autre. Mais peut-être les
spécialistes ont-ils une solution.

db
Avatar
3stone
Salut,

le Nordiste wrote:
Bonjour,

J'ai trois tables T_1, T_2 et T_3 avec le même nombre de champs
( sinon UNION impossible).

Je veux faire quelque chose comme :

(SELECT T_1.* FROM T_1……
UNION
SELECT T_2.* FROM T_2……
ORDER BY T_1.champ_1)
UNION
SELECT T_3.* FROM T_3……

C'est à dire faire l'union ordonnée des deux premières tables,
puis faire l'union avec la 3éme table, SANS retrier le résultat.




Une requête union porte bien son nom... et le tri se fait
toujours sur toute la "pile" et nom par requête.

La seule solution est celle donnée, c'est à dire :
- distinguer les résultats de chaque requête en ajoutant un champ
(préférer un numérique pour sa rapidité de traitement)
- trier sur ce champ, puis sur le champ secondaire.

donc, comme proposé :

SELECT 1 AS TRI, T_1.* FROM T_1
UNION
SELECT 2 AS TRI, T_2.* FROM T_2
UNION
SELECT 3 AS TRI, T_3.* FROM T_3
ORDER BY TRI, champ_1

--
A+
Pierre (3stone) Access MVP
Perso: http://www.3stone.be/
MPFA: http://www.mpfa.info/ (infos générales)
Avatar
blaise cacramp
Bonjour le Nordiste,

Je ne suis pas du tout spécialiste des requêtes UNION mais je propose cette
idée :
Une première requête avec les deux 1ères tables triées;
puis une seconde UNION à partir de cette 1ère requête et de la 3ème table.


Cdt, Blaise

"le Nordiste" a écrit dans le message de news:

Bonjour,

J'ai trois tables T_1, T_2 et T_3 avec le même nombre de champs
( sinon UNION impossible).

Je veux faire quelque chose comme :

(SELECT T_1.* FROM T_1……
UNION
SELECT T_2.* FROM T_2……
ORDER BY T_1.champ_1)
UNION
SELECT T_3.* FROM T_3……

C'est à dire faire l'union ordonnée des deux premières tables,
puis faire l'union avec la 3éme table, SANS retrier le résultat.

Merci pour votre aide,
Avatar
le Nordiste
Je ne suis pas du tout spécialiste des requêtes UNION mais je propose cette
idée :
Une première requête avec les deux 1ères tables triées;
puis une seconde UNION à partir de cette 1ère requête et de la 3è me table.



C'est ce que je faisais mais comme dit plus haut par 3stone
"Une requête union porte bien son nom... et le tri se fait
toujours sur toute la "pile" et nom par requête."

Moi qui croyais que les parenthéses marquaient les limites d'un
traitement,

(SELECT T_1.* FROM T_1……
UNION
SELECT T_2.* FROM T_2…
ORDER BY T_1.champ_1) fin du premier UNION et donc du tri

UNION
SELECT T_3.* FROM T_3…… second UNION SANS TRI

pauvre naïf que je suis…

merci de vos contributions
Avatar
blaise cacramp
3stone a *toujours* raison ;-)

"le Nordiste" a écrit dans le message de news:

Je ne suis pas du tout spécialiste des requêtes UNION mais je propose
cette
idée :
Une première requête avec les deux 1ères tables triées;
puis une seconde UNION à partir de cette 1ère requête et de la 3ème table.



C'est ce que je faisais mais comme dit plus haut par 3stone
"Une requête union porte bien son nom... et le tri se fait
toujours sur toute la "pile" et nom par requête."

Moi qui croyais que les parenthéses marquaient les limites d'un
traitement,

(SELECT T_1.* FROM T_1……
UNION
SELECT T_2.* FROM T_2…
ORDER BY T_1.champ_1) fin du premier UNION et donc du tri

UNION
SELECT T_3.* FROM T_3…… second UNION SANS TRI

pauvre naïf que je suis…

merci de vos contributions