Alias für den Tabellennamen im SQL-insert-Anweisung
Ist es möglich, geben Sie einen Aliasnamen für die Tabelle bin ich zum einfügen von Werten in?
Möchte ich angeben, eine Bedingung innerhalb einer geschachtelten Abfrage und der Tabelle ist zu ausführlich...
Etwas wie drehen diese:
INSERT INTO my_table_with_a_very_long_name (col_a, col_b, col_c)
SELECT foo, bar, baz
FROM other_table
WHERE
other_table.some_value >
(SELECT max(other_value) FROM my_table_with_a_very_long_name);
in diesem:
INSERT INTO my_table_with_a_very_long_name AS t (col_a, col_b, col_c)
SELECT foo, bar, baz
FROM other_table
WHERE
other_table.some_value > (SELECT max(other_value) FROM t);
(offensichtlich mein Fall ist länger und beinhaltet ein paar Referenzen mehr)
- Nein. Aber warum wollen Sie es tun? Nur ästhetik?
- Posten Sie Ihre ursprüngliche Abfrage. Gibt es wahrscheinlich Möglichkeiten, um es zu vereinfachen. Abstraktion ist nicht sinnvoll für diesen Fall. Ein alias auf die Tabelle EINFÜGEN selbst wäre sinnlos, da er nicht verwiesen werden. Aber die gleiche Tabelle kann auf die in der SELECT-Anweisung und einen alias gibt.
- In der Tat war es eine dynamische Abfrage, also wollte ich ersetzen Sie den Namen der Tabelle nur einmal in der überschrift und Verweis der rest von den alias.
- Aaron Bertrand verwendet diese Analogie einmal... und ich dachte, es war eine perfekte Analogie, die ich gestohlen hat. Wenn jemand fragt Sie, wie Sie fahren können und Ihre Kuh zu arbeiten... die erste Frage sollte nicht sein "wie?"... aber "warum?" Und auch, KEINE ist eine gültige Antwort. 😉 Meine Antwort war nicht dazu gedacht, eine kritisch.. ich habe nur gefragt die OP zu denken, warum will er dies tun in den ersten Platz. Meine Entschuldigung, wenn das unhöflich Klang.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du nicht alias einer Tabelle, alias eine Instanz einer Tabelle verweisen.
Dies ermöglicht self-joins, etc wie, Sie haben mehrere Instanzen von Referenzen auf dieselbe physische Tabelle. Es ist nicht ein Fall, wo jeder
AS
gibt, dass die Tabelle einen neuen Namen an anderer Stelle, es ist nur ein alias zu verweisen, Dass insbesondere in Bezug.In Ihrem Fall, gibt es zwei show-Stopper...
Die Tabelle wird eingefügt, ist nicht selbst Teil der select-Abfrage, es ist nicht verwiesen wird, in der gleichen Weise eingestellt, wie
foo
,bar
oderbaz
zum Beispiel. So, Sie können nicht verwenden Sie einen alias an alle (weil es keine Notwendigkeit, es kann niemals auf die verwiesen wird).Auch, selbst wenn es war, können Sie nicht verweisen Sie die gesamte Tabelle über einen alias. Sie verweisen auf ein Feld, als Teil der Abfrage itterating durch das set. Zum Beispiel, dieses funktioniert auch nicht...
Können Sie rund um die Letztgenannte Beispiel benutzen...
Aber immer noch das bringt uns zurück zu dem ersten Punkt, der die Tabelle eingefügt wird nie in der Abfrage verwiesen Teil deiner Aussage.
Die einzige Möglichkeit die ich denken kann immer in der Nähe ist, eine Ansicht zu erstellen...
Ich denke, die Antwort ist KEINE. Es gibt keine
AS
nach dertableName
Referenz
Update
Den
AS
- Klausel wurde ein Teil von PostgreSQL als der version 9.5, obwohl, wie @MatBailie Notizen über die Verschachtelung bedeutet, dass Sie brauchen, um alias-dieINSERT
Abfrage und dieSELECT
sub-query einzeln oder Dinge zu brechen. z.B.:Wie schon andere gesagt haben, können Sie keine alias-Namen als Teil der
INSERT INTO
- Anweisung. Sie müssten, um es in der Unterabfrage in derWHERE
- Anweisung.