2010-09-13 4 views
7

Können wir Aliase mit Insert in Syntax verwenden?Kann ich Aliase in einer INSERT-Anweisung verwenden?

Keiner der folgenden Arbeiten:

INSERT INTO tableblabla AS bla 
INSERT INTO bla tableblabla 
INSERT INTO tableblabla bla 

Ich kann keine Informationen darüber zu finden scheinen; Gibt es eine gültige Möglichkeit, Aliase in einer INSERT-Anweisung zu verwenden?

Über die möglichen Gründe: http://bugs.mysql.com/bug.php?id=3275

+4

Warum brauchen Sie das? –

+0

Welche SQL versuchen Sie zu verwenden? –

+0

@Meakins - Mysql Geschmack. @pekka: Ich habe meine ursprüngliche Frage bearbeitet. – MEM

Antwort

5

Die INSERT syntax erlaubt keine Aliase. Warum brauchen Sie trotzdem eine INSERT-Anweisung? Sie können immer nur INSERT in eine Tabelle eingeben.

+9

+1: Der einzige Grund, warum ich die Notwendigkeit für einen Alias ​​sehen kann, ist, wenn in einer korrelierten Unterabfrage ... –

+0

Ich fragte, ob es Sinn macht, weil ich verstehe, dass ich nicht alle MySQL-Möglichkeiten in Abfragen kenne. und seit ich gelernt habe, dass es eine gute Übung ist, Alias ​​zu verwenden, um besser zu verstehen, was wir benutzen ... dachte ich, dass dies relevant wäre. Dennoch, der Antwortteil: "Die Insert-Syntax erlaubt keine Aliase" war alles, was ich jetzt wissen musste. ;) Aus Gründen, oder wahrscheinlich Gründen, siehe meine Frage Ausgabe heute früher. Danke vielmals. :) – MEM

+2

Bequemlichkeit, Flexibilität und Konsistenz in der Syntax. – Preston

12

Die Möglichkeit, Tabellenaliasnamen für INSERTs zu verwenden, wäre sehr nützlich für ON DUPLICATE KEY-Anweisungen, insbesondere bei der Überprüfung von Spalten. Hier ein Beispiel:

insert into very_long_table_name_that_can_be_modified_one_day_or_during_testing (
    mykey, 
    column1, 
    column2, 
    column3, 
    <column99> 
) 
select 
    mykey, 
    column1, 
    column2, 
    column3, 
    <column99> 
from subquery 
on duplicate key update 
    column1 = ifnull(values(column1), very_long_table_name_that_can_be_modified_one_day_or_during_testing.column1), 
    column2 = ifnull(values(column2), very_long_table_name_that_can_be_modified_one_day_or_during_testing.column2), 
    column3 = ifnull(values(column3), very_long_table_name_that_can_be_modified_one_day_or_during_testing.column3), 
    <column99>; 

Wenn der Tabellenname ändern müssen Sie eine Menge Linie von Codes ändern, im Vergleich zu nur am Anfang ein Alias, die in der Abfrage verwendet wird.

+2

Dies sollte eher ein Kommentar sein. Aber upboot sowieso, wie es sehr wichtig ist – th3an0maly