Обсуждение: order by and union
In postgres 7.0.2 i have an "order by" with column names like this :
select colonne1,colonne2 from A
union
select colonne1,colonne2 from B
order by colonne1,colonne2
In postgres 7.1 this simple example works. But with i have a more
difficult select that doesn't work, and i had to use the number column
to get a good result
This is my real example :
select nmn_can,pre_can,dat_nai,dci_sai,cnd.cod_spe,cnd.cod_pa1,decision
, cnd.cod_pa2
from cnd,cnd_grp, decision where cnd.cod_eta='0731043M'
and cnd.num_can=cnd_grp.num_can and cnd_grp.typ_grp='D'
and cnd_grp.dci_sai=decision.cod_dec
union
select nmn_can,pre_can,dat_nai,dci_sai,cnd.cod_spe,cnd.cod_pa1,decision
, cnd.cod_pa2
from cnd,cnd_grp, decision where cnd.num_can=cnd_grp.num_can and
cnd_grp.typ_grp='D'
and cnd_grp.dci_sai=decision.cod_dec and cnd.cod_cat='520'
and cnd.cod_eta in ( select cod_aff from affichage where
cod_eta='0731043M' and cnd.cod_spe=affichage.cod_spe)
order by cnd.cod_spe, cnd.cod_pa1,decision,nmn_can
so i replace the orber by :
order by 5,6,7,1
Benoit Lion - Inspection Académique de Chambéry - tel :04 79 62 53 19
France
Benoit Lion writes: > select nmn_can,pre_can,dat_nai,dci_sai,cnd.cod_spe,cnd.cod_pa1,decision > , cnd.cod_pa2 > >from cnd,cnd_grp, decision where cnd.cod_eta='0731043M' > and cnd.num_can=cnd_grp.num_can and cnd_grp.typ_grp='D' > and cnd_grp.dci_sai=decision.cod_dec > > union > > select nmn_can,pre_can,dat_nai,dci_sai,cnd.cod_spe,cnd.cod_pa1,decision > , cnd.cod_pa2 > >from cnd,cnd_grp, decision where cnd.num_can=cnd_grp.num_can and > cnd_grp.typ_grp='D' > and cnd_grp.dci_sai=decision.cod_dec and cnd.cod_cat='520' > and cnd.cod_eta in ( select cod_aff from affichage where > cod_eta='0731043M' and cnd.cod_spe=affichage.cod_spe) > > order by cnd.cod_spe, cnd.cod_pa1,decision,nmn_can > > so i replace the orber by : > > order by 5,6,7,1 This is correct. The table names from the union branches are not in scope for the order by. Consider this case select cnd.cod_spe from cnd union select cnd.cod_spe from (select relname from pg_class) as cnd (cod_spe) order by cnd.cod_spe; Which "cnd" is meant here? However, you should be able to write order by cod_spe; -- Peter Eisentraut peter_e@gmx.net http://funkturm.homeip.net/~peter