将数据从一个表插入到另一个表中

我想读取一个表中的所有数据,并将一些数据插入到另一个表中。 我的查询是

INSERT INTO mt_magazine_subscription ( magazine_subscription_id, subscription_name, magazine_id, status ) VALUES ( (SELECT magazine_subscription_id, subscription_name, magazine_id FROM tbl_magazine_subscription ORDER BY magazine_subscription_id ASC), '1') 

但是我得到了一个错误

  #1136 - Column count doesn't match value count at row 1 

请帮帮我。

您可以使用INSERT … SELECT语法。 请注意,您可以直接在SELECT部分​​引用“1”。

 INSERT INTO mt_magazine_subscription ( magazine_subscription_id, subscription_name, magazine_id, status ) SELECT magazine_subscription_id, subscription_name, magazine_id, '1' FROM tbl_magazine_subscription ORDER BY magazine_subscription_id ASC 

如果你想插入所有数据从一个表到另一个表有一个非常简单的SQL

 INSERT INTO destinationTable (SELECT * FROM sourceDbName.SourceTableName); 

它不会像这样工作。

当您尝试使用查询插入行时,所有值都应该在查询中。

有了上面的问题,你想插入magazine_subscription_id, subscription_name, magazine_id, status在select查询您有magazine_subscription_id, subscription_name, magazine_id, status 1这是不可能的。

如果要插入,则需要使用直接值查询插入

实际上,从一个表复制数据的MySQL查询是
Insert into table2_name (column_names) select column_name from table1
其中,从table1复制到table2的值

如果有一个像“ID”的主键,你必须排除它,例如我的PHP表有:ID,COL2,COL3,COL4列。 ID是主键,所以如果我运行这个代码:

 INSERT INTO php (SELECT * FROM php); 

我可能会得到这个错误:

#1062 - Duplicate entry '1' for key 'PRIMARY'

所以这里是解决scheme,我排除了“id”键:

 INSERT INTO php ( col2,col3,col4) (SELECT col2,col3,col4 FROM php2); 

所以我的新的PHP表已经有了所有的php2表行。

尝试这个。 你做错了。

  INSERT INTO mt_magazine_subscription( magazine_subscription_id, subscription_name, magazine_id, status) VALUES ( (SELECT magazine_subscription_id, subscription_name, magazine_id,1 as status FROM tbl_magazine_subscription ORDER BY magazine_subscription_id ASC) ) 
  INSERT INTO mt_magazine_subscription ( magazine_subscription_id, subscription_name, magazine_id, status ) VALUES ( (SELECT magazine_subscription_id, subscription_name, magazine_id,'1' as status FROM tbl_magazine_subscription ORDER BY magazine_subscription_id ASC)) 
 INSERT INTO destination_table ( Field_1, Field_2, Field_3) SELECT Field_1, Field_2, Field_3 FROM source_table; 

但这是一个坏的MYSQL

做这个,而不是:

  1. drop the destination table: DROP DESTINATION_TABLE;
  2. CREATE TABLE DESTINATION_TABLE AS (SELECT * FROM SOURCE_TABLE);
 INSERT INTO mt_magazine_subscription SELECT * FROM tbl_magazine_subscription ORDER BY magazine_subscription_id ASC