Domanda

mi capita di avere due colonne che hanno lo stesso nome di due parole riservate SQL, chiave e valore. Quando si utilizza l'istruzione SELECT posso creare un alias di tabella e risolvere in questo modo.

Ora sto cercando di dati INSERT e sembra che non è possibile creare tabella alias nell'istruzione INSERT.

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

ottengo l'errore in 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')' indica che alias non può essere creato.

Ci sono modi per risolvere questo senza rinominare le colonne chiave e il valore?

È stato utile?

Soluzione

L'uso di back-tick per sfuggire parole riservate.

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

appare come inserto non supporta alias. vedere qui


Edit: ok, l'arbitro dice no MySQL alias nel inserto


Si fa il lavoro

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)

Altri suggerimenti

E 'facile essere il furbone in base alla tua domanda

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

Altri problemi

Senza senso di avere camelCase, perché Windows non supporta il nome del file con lettere maiuscole e minuscole ancora.

Quindi, è in pratica può avere allo stesso tavolo con il caso diverso in linux / mac, ma non su 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)

Key è un

parola riservata

In Mysql quindi ha bisogno di essere citato

È possibile controllare tutte le parole riservate qui

sembra che non è possibile creare alias di tabella nella INSERT

Alcuni prodotti SQL (ad esempio SQL Server) non consentono questo, ma non sono sicuro che sia una buona cosa.

Secondo SQL standard, un alias dovrebbe avere l'effetto dell'essere tabella materializzato cioè un INSERT (o qualsiasi altro sapore di aggiornamento) a una tabella alias dovrebbe lasciare la tabella di base sottostante (s) inalterata.

In SQL Server, un tale INSERT influisce la tabella di base sottostante (s), ma penso che il vero e proprio (non conforme) effetto è quello che la maggior parte dei programmatori SQL si aspetta che accada in quella situazione. In altre parole, una dichiarazione INSERT valida che ha provocato nessuna riga viene aggiunto Credo che inizialmente sarebbe sospettato come un bug, anche se questo è il modo standard SQL dovrebbe funzionare.

Quindi penso che non consentire la situazione a sorgere, in primo luogo, mentre ancora una volta essere tecnicamente non conforme alle norme, è auspicabile, a mio parere.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top