Spalten benennen, die keinen bekannten Namen haben


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:

Über den Autor

Foto von Markus Winand

Markus Winand lehrt effizientes SQL – inhouse und online. Er minimiert die Entwicklungszeit durch modernes SQL und optimiert die Laufzeit durch schlaue Indizierung – dazu hat er auch das Buch SQL Performance Explained veröffentlicht.

Fußnoten

  1. SQL:2016-2, §7.3, Syntax Rule 4, letzter Satz.

„modern SQL“ von Markus Winand ist unter einer Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License lizenziert.
Impressum | Kontakt | KEINE GEWÄHR | Handelsmarken | Datenschutz | CC-BY-NC-ND 3.0 Lizenz