2011-01-17 14 views
1

Ich habe zufällig zwei Spalten mit dem gleichen Namen wie zwei reservierte SQL-Wörter, Schlüssel und Wert. Bei Verwendung der SELECT-Anweisung kann ich einen Tabellenalias erstellen und so lösen.MySQL INSERT mit Tabelle Alias ​​

Jetzt versuche ich Daten einfügen und es sieht so aus, als könnten Sie nicht Tabellenalias in der INSERT-Anweisung erstellen.

INSERT INTO attributeStrings ats 
(ats.ItemID,ats.Key,ats.Value) 
VALUES (3,'Categories','TechGUI') 

ich Fehler bei 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')' darauf hinweist, dass Alias ​​nicht erstellt werden kann.

Gibt es Möglichkeiten, dies zu lösen, ohne die Spalten Schlüssel und Wert umzubenennen?

+1

warum machen Sie Ihr Leben so schwer? vermeiden Sie reservierte Wörter überhaupt – ajreal

+1

@ajreal Nun, es ist immer einfach, der Weise zu sein, und es gibt viele von ihnen;) Ich denke, ich habe meine Lektion gelernt. –

Antwort

4

Verwenden Sie das Häkchen, um reservierte Wörter zu entfernen.

INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI') 

Sieht aus wie Insert unterstützt nicht Alias. see here


Edit: ok, die MySQL ref sagt kein Alias ​​in Einsatz


Es

mysql> INSERT INTO `attributeStrings` (`ItemID`, `Key`,`Value`) VALUES (3,'Categories','TechGUI'); 
Query OK, 1 row affected (0.03 sec) 

mysql> select * from attributeStrings; 
+--------+------------+---------+ 
| ItemId | Key  | Value | 
+--------+------------+---------+ 
|  3 | Categories | TechGUI | 
+--------+------------+---------+ 
1 row in set (0.00 sec) 
+0

@Max Kielland hat die Antwort aktualisiert. – Nishant

+0

Ja, ich vermutete, dass INSERT keinen Alias ​​unterstützt hat. Die Lösung, die Sie hier gezeigt haben, funktioniert auch nicht. Es scheint, als könnten Tabellen- oder Spaltennamen in einer INSERT-Anweisung Strings sein. –

+0

@Max Kielland Es funktioniert für mich. – Nishant

1

Ist einfach zu sein, die wise guy basierend auf Ihre Frage nicht funktioniert

INSERT INTO attributeStrings 
VALUES (3,'Categories','TechGUI'); 
/* if the table have more than 3 columns, fill-up every column then */ 

Andere Probleme

Sinnlose Camelcase zu haben, weil Fenster nicht Dateinamen mit Groß- und Kleinschreibung noch nicht unterstützt.

So kann man praktisch in Linux/Mac mit anderen Fall einen Tisch haben, aber nicht auf Windows

mysql> create table abc (id int(10)); 
Query OK, 0 rows affected (0.00 sec) 

mysql> create table abC (id int(10)); 
Query OK, 0 rows affected (0.01 sec) 
+0

Ja, CaMelCaSe in DB ist ein Schmerz. Vor allem, wenn Sie nicht das gleiche Betriebssystem in der gesamten Umgebung haben - dev, test, prod. – Nishant

+0

+1 OOOhhh !! Ich habe nie über diesen Ansatz nachgedacht! Funktioniert auch, ich lerne so viel hier auf SO! –

0

Key ist ein

reserviertes Wort

In Mysql so muss es

zitiert werden Sie können alle Reserviert überprüfen Wörter here

0

es scheint, wie Sie nicht Tabellenalias in der INSERT-Anweisung

Einige SQL-Produkte (z erstellen SQL Server) erlauben dies, aber ich bin mir nicht sicher, ob das eine gute Sache ist.

Gemäß den SQL-Standards sollte ein Alias ​​den Effekt haben, dass die Tabelle materialisiert wird, d. H. Ein INSERT (oder ein anderer Aktualisierungsargument) einer Alias-Tabelle sollte die zugrundeliegenden Basistabelle (n) unberührt lassen.

In SQL Server wirkt sich ein solcher INSERT auf die zugrunde liegenden Basistabelle (n) aus, aber ich denke, dass der tatsächliche (nicht konforme) Effekt das ist, was die meisten SQL-Codierer in dieser Situation erwarten würden. Anders gesagt, eine gültige INSERT-Anweisung, die dazu führte, dass keine Zeilen hinzugefügt wurden, würde ich zunächst für einen Bug halten, obwohl Standard SQL eigentlich so funktionieren sollte.

Also ich denke, die Situation zu entziehen, in erster Linie, während wieder technisch nicht mit Standards konform ist, ist meiner Meinung nach wünschenswert.