Question

J'arrive d'avoir deux colonnes ayant le même nom que deux mots réservés SQL, clé et la valeur. Lorsque vous utilisez l'instruction SELECT je peux créer un alias de table et résoudre de cette façon.

Maintenant, je suis en train de données INSERT et il semble que vous ne pouvez pas créer alias de table dans l'instruction INSERT.

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

J'obtiens l'erreur à 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')' indiquant que alias ne peut pas être créé.

Y a-t-il des moyens de résoudre cela sans renommer les colonnes clés et la valeur?

Était-ce utile?

La solution

Utilisez back-tick pour échapper des mots réservés.

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

On dirait insert ne prend pas en charge alias. voir ici


Edit: ok, ref MySQL dit non alias dans insert


Il fonctionne

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)

Autres conseils

est facile d'être le type sage en fonction de votre question

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

Autres problèmes

Meaningless d'avoir camelCase, parce que les fenêtres ne prend pas en charge le nom de fichier avec le cas encore sensible.

Alors, vous pouvez pratiquement avoir la même table avec le cas différent dans linux / mac, mais pas sur les fenêtres

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)

est un

  

WORD RÉSERVÉ

Mysql donc il doit être cité

Vous pouvez vérifier tous les mots réservés

  

il semble que vous ne pouvez pas créer alias de table dans l'instruction INSERT

Certains produits SQL (par exemple SQL Server) ne permettent cela, mais je ne suis pas sûr que c'est une bonne chose.

Selon les normes SQL, un alias devrait avoir pour effet de l'être de table matérialisée dire un INSERT (ou tout autre saveur de mise à jour) à une table crénelage doit quitter la table de base sous-jacente (s) non affecté.

Dans SQL Server, un tel INSERT affecte la table de base sous-jacente (s) mais je pense que l'effet réel (non conforme) est ce que la plupart des codeurs SQL compteraient se produire dans cette situation. Autrement dit, une instruction INSERT valide qui a donné lieu à aucune ligne AJOUTÉE Je pense que serait initialement soupçonné comme un bug, même si c'est la façon standard SQL est censé fonctionner.

Je pense que la situation de rejeter surgir en premier lieu, tout en étant à nouveau techniquement non conforme aux normes, est souhaitable, à mon avis.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top