|
<< Click to Display Table of Contents >> SQL UNION queries og sortering med ORDER BY |
![]() ![]()
|
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