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 COUNT(c1)
, COUNT(*)
FROM (VALUES (1)
, (NULL)
) t1(c1)
Die Spaltennamen, die von values
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 t1 (c1) AS (
VALUES (1)
, (NULL)
)
SELECT COUNT(c1)
, COUNT(*)
FROM t1
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 derived tables. Seit MySQL 8.0
- Akzeptiert weniger Spalten in der a
<derived column list>
als die Basistabelle hat - Nicht für normale Tabellen und Views
with
wird seit 9iR2 unterstützt, Spaltenaliase aber erst sei 11gR2 (ORA-32033)- Nur ganz am Anfang einer Anweisung. z.B.:
with...insert...select