2014-12-26 60 views
1

我已經得到了表INSERT INTO與SELECT和一些默認值

person 
+--------------+--------------+------+-----+---------+----------------+ 
| Field  | Type   | Null | Key | Default | Extra   | 
+--------------+--------------+------+-----+---------+----------------+ 
| id   | int(11)  | NO | PRI | NULL | auto_increment | 
| name   | varchar(100) | NO |  | NULL |    | 
+--------------+--------------+------+-----+---------+----------------+ 

chatroom 
+-----------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+-----------+---------+------+-----+---------+----------------+ 
| id  | int(11) | NO | PRI | NULL | auto_increment | 
| col1  | int(11) | YES |  | NULL |    | 
| col2  | int(11) | YES |  | NULL |    | 
+-----------+---------+------+-----+---------+----------------+ 

,我想執行以下語句(每個personchatroom添加一行idcol2列的相應person.idDEFAULTNULL值)

INSERT INTO chatroom (DEFAULT, col1, NULL) SELECT DEFAULT, id AS col1, NULL FROM person; 

但它不起作用。 有人可以糾正查詢嗎?

回答

1

您的id字段爲auto_increment,因此您可以將其保留在查詢範圍之外,並自動將該行設置爲下一個值。另外,因爲col2的默認值爲NULL,所以它也可以不在查詢中。它將被自動設置爲默認值。

INSERT INTO chatroom (col1) SELECT id FROM person 
0

第一個列表必須包含列名,而不是值。插入默認值時,剛剛從列表中忽略它:

INSERT INTO chatroom (col1, col2) 
SELECT id, NULL 
FROM person 
0

沒有必要在查詢DEFAULT。試試這個:

INSERT INTO chatroom (col1, col2) SELECT id AS col1, NULL FROM person;

當你不包括在INSERT語句中的列,它會嘗試使用默認值(如果可用)。

1

因爲您的chatroom表具有id列作爲自動遞增,因此不需要爲此列傳遞值。當在表中插入新行時,此列具有自動值。所以不需要DEFAULT

其次,col2將根據您的表定義接受null,所以也不需要爲該列傳遞值,直到您有一些值需要放入此列。

所以,你必須只針對此指定列,你纔有價值

所以,如果你想在col2柱插入null值,然後用這個

INSERT INTO chatroom (col1) 
SELECT id FROM person; 

所以,如果你想插入某些值在col2列然後用這個

INSERT INTO chatroom (col1,col2) 
SELECT id, col2 FROM person;