我碰巧有两列与两个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?
答案 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)
答案 3 :(得分:0)
似乎无法在INSERT语句中创建表别名
某些SQL产品(例如SQL Server)确实允许这样做,但我不确定这是件好事。
根据SQL标准,别名应该具有实现表的效果,即别名表的INSERT
(或任何其他更新风格)应该使基础基表不受影响。< / p>
在SQL Server中,这样的INSERT
确实会影响底层基表,但我认为实际(不合规)效果是大多数SQL编码器在这种情况下预期会发生的。换句话说,一个有效的INSERT语句导致没有添加任何行我认为最初会怀疑是一个错误,即使这是标准SQL的工作方式。
因此,我认为首先不允许出现这种情况,而在技术上又不符合标准,我认为是可取的。