我有桌子
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 | |
+-----------+---------+------+-----+---------+----------------+
我希望执行以下语句(对于每个person
,在chatroom
中添加一行,其中包含相应的person.id
和DEFAULT
以及NULL
值id
和col2
列)
INSERT INTO chatroom (DEFAULT, col1, NULL) SELECT DEFAULT, id AS col1, NULL FROM person;
但它不起作用。 有人可以更正查询吗?
答案 0 :(得分:1)
您的id
字段为auto_increment
,因此您可以将其保留在查询之外,它会自动将该行设置为下一个值。此外,由于col2
的默认值为NULL
,因此也可以将其排除在查询之外。它将自动设置为默认值。
INSERT INTO chatroom (col1) SELECT id FROM person
答案 1 :(得分:1)
因为chatroom
表的id
列为自动增量,所以不需要传递此列的值。在表中插入新行时,此列具有自动值。所以不需要DEFAULT
。
其次,col2
将根据您的表定义接受null
,因此在您有一些值需要放入此列之前,也无需为此列传递值
所以你必须只为此指定列,你有值
因此,如果您想在null
列中插入col2
值,请使用此
INSERT INTO chatroom (col1)
SELECT id FROM person;
因此,如果您想在col2
列中插入一些值,请使用此
INSERT INTO chatroom (col1,col2)
SELECT id, col2 FROM person;
答案 2 :(得分:0)
第一个列表必须包含列名,而不是值。要插入默认值,只需从列表中省略它:
INSERT INTO chatroom (col1, col2)
SELECT id, NULL
FROM person
答案 3 :(得分:0)
无需在查询中包含DEFAULT
。试试这个:
INSERT INTO chatroom (col1, col2) SELECT id AS col1, NULL FROM person;
如果您未在INSERT语句中包含列,则会尝试使用默认值(如果可用)。