带有表别名的MySQL INSERT

时间:2011-01-17 10:29:23

标签: mysql sql insert table-alias

我碰巧有两列与两个SQL保留字,Key和Value具有相同的名称。 使用SELECT语句时,我可以创建一个表别名并以这种方式解决它。

现在我正在尝试INSERT数据,看起来你无法在INSERT语句中创建表别名。

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')'收到错误,表示无法创建别名。

有没有办法解决这个问题而不重命名Key和Value?

4 个答案:

答案 0 :(得分:4)

使用反划线来逃避保留字。

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

看起来插件不支持别名。 see here


编辑:好的,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)

答案 1 :(得分:1)

根据您的问题很容易成为聪明人

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

其他问题

无法使用camelCase,因为windows不支持区分大小写的文件名。

所以,你几乎可以在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)

答案 2 :(得分:0)

Key是

  

保留字

在Mysql中需要引用

您可以查看所有保留字here

答案 3 :(得分:0)

  

似乎无法在INSERT语句中创建表别名

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

根据SQL标准,别名应该具有实现表的效果,即别名表的INSERT(或任何其他更新风格)应该使基础基表不受影响。< / p>

在SQL Server中,这样的INSERT确实会影响底层基表,但我认为实际(不合规)效果是大多数SQL编码器在这种情况下预期会发生的。换句话说,一个有效的INSERT语句导致没有添加任何行我认为最初会怀疑是一个错误,即使这是标准SQL的工作方式。

因此,我认为首先不允许出现这种情况,而在技术上又不符合标准,我认为是可取的。