- Kategorien:
VALUES¶
In der SELECT-Anweisung ermöglicht die Unterklausel VALUES der FROM-Klausel die Angabe einer Menge von Konstanten zur Bildung einer endlichen Menge von Zeilen.
Informationen zur VALUES-Klausel in der INSERT-Anweisung finden Sie in der Dokumentation für die INSERT-Anweisung.
Syntax¶
SELECT ...
FROM ( VALUES ( <expr> [ , <expr> [ , ... ] ] ) [ , ( ... ) ] )
[ [ AS ] <table_alias> [ ( <column_alias> [ , ... ] ) ] ]
[ ... ]
Parameter¶
expr
Jeder Ausdruck muss eine Konstante sein oder ein Ausdruck, die bzw. der bei der Kompilierung der SQL-Anweisung als eine Konstante ausgewertet werden kann.
Die meisten einfachen arithmetischen Ausdrücke und Zeichenfolgenfunktionen können zur Kompilierungszeit ausgewertet werden, die meisten anderen Ausdrücke jedoch nicht.
table_alias
Ein optionaler Alias, um der Gruppe von Zeilen einen Namen zu geben, als wäre die Gruppe von Zeilen eine Tabelle.
column_alias
Optionale Spaltenaliasse können die Spaltennamen angeben.
Nutzungshinweise¶
In einer FROM-Klausel darf eine VALUES-Klausel nicht das Schlüsselwort
DEFAULT
enthalten. Diese Beschränkung steht im Gegensatz zu einer VALUES-Klausel in einer INSERT-Anweisung, die die Verwendung vonDEFAULT
unterstützt. Beispiel:INSERT INTO table VALUES (10, DEFAULT, 'Name') ...
.Wenn die VALUES-Klausel mehrere numerische Werte für dieselbe Spalte enthält und die Werte in Bezug auf Skalierung oder Genauigkeit erheblich voneinander abweichen, könnte Snowflake einen
out of range
-Fehler zurückgeben. Der Fehler kann auch dann zurückgegeben werden, wenn nicht jeder einzelne Wert zu einem Fehler für den Datentyp der Zielspalte führen würde.Der Fehler tritt auf, weil Snowflake einen gemeinsamen numerischen Datentyp bestimmt, der alle in einer VALUES-Klausel angegebenen numerischen Literale umfassen kann, und einige Werte liegen möglicherweise außerhalb des Bereichs des bestimmten gemeinsamen Datentyps.
Zum Beispiel gibt die folgende Anweisung einen``out of range``-Fehler zurück:
SELECT column1 FROM VALUES (3.469446951953614e-18), (115898.73);
100039 (22003): Numeric value '115898.73' is out of range
Sie können diese Art von Fehler vermeiden, indem Sie die folgenden Änderungen vornehmen:
Trennen Sie die Werte in der VALUES-Klausel in mehrere SQL-Anweisungen.
Wandeln Sie Werte in einen Datentyp mit einem größeren Wertebereich um, z. B. FLOAT. Die Umwandlung kann jedoch zu einer geringeren numerischen Genauigkeit führen.
Geben Sie die Werte als Textzeichenfolgen in Anführungszeichen an, und wandeln Sie die Werte dann nach Bedarf in numerische Werte um.
Die VALUES-Klausel ist auf 16.384 Zeilen begrenzt.
Beispiele¶
Die folgenden Beispiele verwenden die VALUES-Klausel, um einen festen, bekannten Satz von Zeilen zu generieren:
SELECT * FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+---------+
| COLUMN1 | COLUMN2 |
|---------+---------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+---------+
Sie können Werte entweder über den Spaltennamen (implizit) oder über die Spaltenposition referenzieren. Im folgenden Beispiel wird die zweite Spalte nach Spaltenposition referenziert:
SELECT column1, $2 FROM (VALUES (1, 'one'), (2, 'two'), (3, 'three'));
+---------+-------+
| COLUMN1 | $2 |
|---------+-------|
| 1 | one |
| 2 | two |
| 3 | three |
+---------+-------+
Im folgenden Beispiel werden mehrere VALUES-Klauseln durch Verwendung von Aliassen unterschieden:
SELECT v1.$2, v2.$2
FROM (VALUES (1, 'one'), (2, 'two')) AS v1
INNER JOIN (VALUES (1, 'One'), (3, 'three')) AS v2
WHERE v2.$1 = v1.$1;
Sie können auch Aliasse für die Spaltennamen angeben, wie im folgenden Beispiel gezeigt:
SELECT c1, c2
FROM (VALUES (1, 'one'), (2, 'two')) AS v1 (c1, c2);