这是我的代码片段。 我不知道为什么insert语句(第3个片段)不起作用?
/* work nicely*/
create table t1
(
a int,
b varchar(255)
);
/* work nicely*/
insert into t1 values (1,"one"),(2,"two");
/* Why does this one not work??? */
insert into t1
values select * from t1;
答案 0 :(得分:5)
通常,当您使用SELECT查询的结果作为INSERT查询的值时,将删除VALUES关键字。 This is true in MySQL as well:
INSERT INTO t1
SELECT * FROM t1;
上面给出的版本是脆弱的,因为它在很大程度上依赖于源表和目标表中列的数量,顺序和类型是相同的(可能在大多数实际情况下,您不会插入取自的值同一张表)。
我建议在使用INSERT..SELECT作为最佳做法时明确指定列:
INSERT INTO t1(col1, col2, col3)
SELECT colA, colB, colC FROM t2