SQL UNION queries og sortering med ORDER BY

<< Click to Display Table of Contents >>

Navigation:  SQL Reference >

SQL UNION queries og sortering med ORDER BY

Previous pageReturn to chapter overviewNext page

UNION queries og sortering med ORDER BY

ISO SQL siger ikke noget specifikt om hvilke feltnavne fra de to SQL del-udtryk, der skal være gældende i det endelige udkomme af et UNION udtryk, men det vil ofte være det øverste/første af de to udtryk, der vil definere det samlede udtryks kolonnenavne.

Hvis to tabeller er defineret med feltnavne som:
 TabelA: [Fornavn], [Efternavn] og
 TabelB: [FNavn], [ENavn]
vil en UNION query som
SELECT * FROM TabelA UNION SELECT * FROM TabelB
give feltnavnene: [Fornavn], [Efternavn]  - dvs. sv.t. den først forespugte tabel.

For sorteringen af det endelige resultat anviser ISO SQL, at ORDER BY skal placeres efter det sidste af de to (eller flere) UNION-sammenflettede udtryk.

I Absolute Database vil ORDER BY placeret nederst primært være hægtet på det sidste SELECT udtryk i en UNION query (dvs. en afvigelse fra ISO SQL standarden!), hvorfor de(t) i ORDER BY kriteriet anførte feltnavn(e) skal være foreneligt med feltnavn(ene) i dette sidste SELECT udtryk, hvis de indgående tabeller da ellers har forskellige feltnavne, hvilket så kan virke lidt ulogisk, når kolonnenavnene i output netop tages fra feltnavnene i det første af SELECT udtrykkene.

For at opnå en eentydig portabel sortering på det fælles resultat, kan man påføre sit ORDER BY på et valgt kolonnenummer (første kolonne = 1) fremfor på et givent kolonnenavn - dvs. f.eks. som her med sortering på første output kolonne:
SELECT Fornavn, Efternavn FROM TabelA UNION SELECT FNavn, ENavn FROM TabelB ORDER BY 1
Om ønsket kan der sorteres på flere kolonner som f.eks. i ORDER BY 1, 2  
_____________________________

27-10-2017 - © 2003-2017 Niels Knabe