Normalerweise vergibt man Spaltennamen mit den entsprechenden Create
-Anweisungen und verwendet falls nötig einen Alias im Select
. Zum vergeben eines Aliases muss man aber den ursprünglichen Spaltennamen kennen. Das ist zum Beispiel bei der Verwendung von Tabellenfunktionen, Unnest
und Values
der nicht Fall. Der einzige Weg diesen Spalten Namen zu geben ist auf Basis ihrer Position.
Option 1: Namen in der from
-Klausel zuweisen
Neben Aliasnamen für Tabellen kann fortgeschrittenes SQL-92 in der From
-Klausel auch Spaltennamen zuweisen:
SELECT b, a
FROM (VALUES (1, 'a')
) t(a, b)
Die Spaltennamen, die von Walues
geliefert werden, hängen von der Implementierung ab0. Damit kann man keine portable SQL-Anweisung schreiben. Daher vergibt das Beispiel in der From
-Klausel einen Alias für die Tabelle und Ihre Spalte. Diese Namen können dann wie gewohnt benutzt werden, ohne die Portabilität einzuschränken.
Option 2: Mit Common-Table-Expressions (with
)
Seit SQL:1999 kann auch die With
-Klausel genutzt werden, um Spalten anhand Ihrer Position zu benennen – also ohne dass man den ursprünglichen Namen kennt:
WITH t (a, b) AS (
VALUES (1, 'a')
)
SELECT b, a
FROM t
Kompatibilität
Obwohl die Vergabe von Spaltenaliassen in der From
-Klausel bereits seit SQL-92 möglich ist und mit SQL:1999 verpflichtend wurde, wird With
besser unterstützt:
- Nur für
Values
undSelect
:FROM (VALUES | SELECT …) t(c1, c2)
- Nur für
Select
:FROM (SELECT …) t(c1, c2)
- Nur für
Values
, dann aber verpflichtend:FROM (VALUES …) t(c1, c2)
- Akzeptiert weniger Spalten in
<derived column list>
als in der Tabelle - Nur ganz am Anfang einer Anweisung. z.B.:
with...insert...select
.