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:

BigQueryDb2 (LUW)MariaDBMySQLaOracle DBdPostgreSQLbSQL ServerceSQLiteOption 1: from-KlauselOption 2: with-Klausel
  1. Nur für derived tables. Seit MySQL 8.0
  2. Akzeptiert weniger Spalten in der a <derived column list> als die Basistabelle hat
  3. Nicht für normale Tabellen und Views
  4. with wird seit 9iR2 unterstützt, Spaltenaliase aber erst sei 11gR2 (ORA-32033)
  5. Nur ganz am Anfang einer Anweisung. z.B.: with...insert...select

20 Jahre SQL-Evolution kann man nicht an einem Tag nachholen. Abonniere den Newsletter via E-Mail, Twitter oder RSS um sukzessive aufzuholen und modern-sql.com am Radar zu behalten.

Über den Autor

Foto von Markus Winand

Markus Winand gibt auf modern-sql.com Einblick in SQL und zeigt, wie es von verschiedenen Systemen unterstützt wird. Zuvor machte er use-the-index-luke.com, was er noch immer wartet. Markus kann als Trainer, Sprecher und Berater auf winand.at engagiert werden.

Sein Buch kaufen

Titelbild von „SQL Performance Explained“: Eichhörnchen läuft durchs Grass

Die Essenz: SQL-Tuning auf 200 Seiten

Jetzt Kaufen
(Taschenbuch und/oder PDF)

Sein Training

Markus verwandelt veraltetes SQL-92-Wissen in solides und zeitgemäßes SQL-Know-how

Erfahren Sie mehr»

Fußnoten

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

Mit Markus Winand verbinden

Markus Winand auf LinkedInMarkus Winand auf XINGMarkus Winand auf Twitter
„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 und DSGVO | CC-BY-NC-ND 3.0 Lizenz