我碰巧有两个列具有与两个SQL保留单词,键和值相同的名称。使用Select语句时,我可以创建一个表别名并以这种方式解决。

现在,我正在尝试插入数据,似乎您无法在插入语句中创建表格别名。

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

我在 'ats (ats.ItemID,ats.Key,ats.Value) VALUES (3,'Categories','TechGUI')' 表示无法创建别名。

是否有任何方法可以在不重命名列键和价值的情况下解决此问题?

有帮助吗?

解决方案

使用后踢来逃避保留的单词。

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

看起来插入不支持别名。 看这里


编辑:好的,MySQL Ref在插入中没有别名


它确实有效

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)

其他提示

很容易成为 有智慧的人 基于您的问题

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

其他问题

拥有骆驼板毫无意义,因为Windows还不支持CASE敏感的文件名。

因此,您实际上可以在Linux/Mac中具有不同情况的同一张表,但在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)

钥匙是a

保留的单词

在mysql中,需要引用

您可以检查所有保留的单词 这里

似乎您无法在插入语句中创建表别名

某些SQL产品(例如SQL Server)确实允许这样做,但我不确定这是一件好事。

根据SQL的标准,别名应具有表现出来的效果,即 INSERT (或任何其他更新的味道)到混叠桌上应使基础基础表不受影响。

在SQL Server中 INSERT 确实会影响基本的基础表,但我认为实际(不合规)效果是大多数SQL编码员在这种情况下会发生的事情。换句话说,一个有效的插入语句,我认为最初不会被认为是错误的,即使这是标准SQL应该使用的方式。

因此,我认为首先不这样做的情况,同时在技术上再次不符合标准,这是我认为的不可思议的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top