当列数与值的数量不匹配时插入

时间:2010-01-27 10:15:22

标签: mysql insert

我有一个insert sql语句,例如

INSERT INTO `table_a` (`col_a`, `col_b`, `col_c`, `col_d`) VALUES
(1, 2, 3, 4),
(2, 1, 6, 9),
(3, 1, 4, 5)

我想将其插入到另一个表中,但是我要插入的表具有与sql语句不同的结构(它具有更少的字段),例如

table_b has columns 'col_a', 'col_b', 'col_d'

我需要对原始sql语句做些什么才能让它将其插入table_b。我想这只是忽略col_c中的值而只是将其发送到临时变量而不是字段的内容。

INSERT INTO `table_b` (`col_a`, `col_b`, @temp_var, `col_d`) VALUES
(1, 2, 3, 4),
(2, 1, 6, 9),
(3, 1, 4, 5)

3 个答案:

答案 0 :(得分:5)

使用临时表:

CREATE TEMPORARY TABLE myTemp (
col_a integer,
col_b integer,
col_c integer,
col_d integer
);
INSERT INTO myTemp (col_a, col_b, col_c, col_d) VALUES (1, 2, 3, 4), (2, 1, 6, 9), (3, 1, 4, 5);
INSERT INTO table_a (SELECT col_a,col_b,col_d FROM myTemp);

会话结束后表格会被删除(或者您可以手动将其删除)

答案 1 :(得分:3)

你怎么删除它?

INSERT INTO table_b (col_a, col_b, col_d) VALUES (1, 2, 4), (2, 1, 9), (3, 1, 5)

答案 2 :(得分:2)

这很丑陋,我刚刚在SQLite中尝试过,但我可以想象它也适用于MySQL(documentation 说它不是< / em>允许)(更新:请参阅John的评论,它确实 在MySQL中工作):

sqlite> create table t(a,b,c);
sqlite> insert into t (a,b,b,c) values (1,2,3,4);
sqlite> select * from t;
1|2|4