Question

C’est la première fois que je tente de répondre à ma propre question, puisqu’une personne risque de se heurter à cette difficulté, ce qui pourrait être utile. En utilisant Firebird, je souhaite combiner les résultats de deux requêtes en utilisant UNION ALL, puis trier le résultat obtenu sur une colonne donnée. Quelque chose comme:

(select C1, C2, C3 from T1)
union all 
(select C1, C2, C3 from T2)
order by C3

Les parenthèses proviennent d'une syntaxe valide pour d'autres bases de données et sont nécessaires pour s'assurer que les arguments de UNION ALL (opération définie pour fonctionner sur des tables - c'est-à-dire un ensemble d'enregistrements non ordonné ) Ne pas essayer d’être commandé individuellement. Cependant, je ne pouvais pas faire fonctionner cette syntaxe dans Firebird - comment peut-on le faire?

Était-ce utile?

La solution

SELECT C1, C2, C3
FROM (
    select C1, C2, C3 from T1
    union all 
    select C1, C2, C3 from T2
)
order by C3

Autres conseils

Il n'est pas nécessaire que les noms de champs soient égaux. C'est pourquoi vous ne pouvez pas utiliser le nom du champ dans l'ordre de.
Vous pouvez utiliser l'index de champ à la place. Comme dans:

(select C1, C2, C3 from T1)
union all 
(select C7, C8, C9 from T2)
order by 3  

Que diriez-vous de:

select C1, C2, C3 from T1
union all 
select C1, C2, C3 from T2
order by 2

Au moins dans les nouvelles versions de Firebird, cela fonctionne si vous commandez par & "Number &"; au lieu d'utiliser un alias.

Dans Firebird 1.5, cela fonctionne pour moi

create view V1 (C1, C2, C3) as
  select C1, C2, C3 from T1
  union all 
  select C1, C2, C3 from T2

et ensuite

select C1, C2, C3 from V1 order by C3

Effectuez UNION ALL dans une vue (sans la clause ORDER BY), puis sélectionnez-la dans la vue à l'aide de ORDER BY.

Le déplacement de order by dans une requête a un effet non sur la grille de données en sortie.

select * from (
    select first 1
        C1
    from T1
    order by id desc
)
union all
select * from (
    select first 1
        C1
    from T2
    order by id desc
)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top