2012-04-30 43 views
0

我有小問題,將數據插入我的表「事件」如何使用子查詢將數據插入到視圖中?

+-------+----------+------+-----+---------+----------------+ 
| Field | Type  | Null | Key | Default | Extra   | 
+-------+----------+------+-----+---------+----------------+ 
| id | int(11) | NO | PRI | NULL | auto_increment | 
| name | longtext | YES |  | NULL |    | 
+-------+----------+------+-----+---------+----------------+ 

從我的觀點OLD_DATA:

+-------+------+------+-----+---------+-------+ 
| Field | Type | Null | Key | Default | Extra | 
+-------+------+------+-----+---------+-------+ 
| event | text | YES |  | NULL |  | 
+-------+------+------+-----+---------+-------+ 

我想從視圖OLD_DATA從域「事件」的數據插入到「名稱事件‘「,在表中的字段’爲此,我試圖用命令:

insert into 'events' ('name') select 'event' from 'old_data' 
insert into 'events' ('name') select 'event' from 'old_data' group by 'event'; 

等等等等,每一次它的語法錯誤。爲什麼?!

回答

3

您在標識符周圍使用撇號分隔符不正確(它們用於分隔字符串)。嘗試:

INSERT INTO events (name) SELECT event FROM old_data; 

如果您想使用標識周圍的分隔符,你應該使用反引號(`):

INSERT INTO `events` (`name`) SELECT `event` FROM `old_data`; 

MySQL manual

標識符引號字符是反引號(「`」):

 
mysql>SELECT * FROM `select` WHERE `select`.id > 100; 

如果啓用了ANSI_QUOTES SQL模式,它也允許雙引號內引用標識符:

 
mysql>CREATE TABLE "test" (col INT); 
ERROR 1064: You have an error in your SQL syntax... 
mysql>SET sql_mode='ANSI_QUOTES'; 
mysql>CREATE TABLE "test" (col INT); 
Query OK, 0 rows affected (0.00 sec) 

ANSI_QUOTES模式會導致服務器來解釋雙引號字符串作爲標識符。因此,啓用此模式時,字符串文字必須包含在單引號內。它們不能用雙引號括起來。服務器SQL模式按照Section 5.1.6, 「Server SQL Modes」中所述進行控制。

如果引用標識符,標識符引號字符可以包含在標識符中。如果要包含在標識符中的字符與用於引用標識符本身的字符相同,則需要將字符加倍。下面的語句創建一個名爲表a`b包含名爲c"d列:

 
mysql>CREATE TABLE `a``b` (`c"d` INT); 

在查詢的選擇列表中,帶引號的列別名可以使用標識符或字符串引號字符指定

 
mysql>SELECT 1 AS `one`, 2 AS 'two'; 
+-----+-----+ 
| one | two | 
+-----+-----+ 
| 1 | 2 | 
+-----+-----+ 

在聲明中的其他地方,引用別名的引用必須使用標識符引用或引用被視爲字符串文字。

相關問題