2013-02-16 176 views
40

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

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 

请帮助我。

回答

85

的查询可以使用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 
0

试试这个。你做错了。

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) 
    ) 
+0

这不起作用,因为围绕select的额外父母不工作。请参阅文档: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html 它的INSERT INTO db(列)SELECT列FROM WHERE blah = 1; – transformerTroy 2014-09-08 12:23:18

5

它不会这样工作。

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

随着你想选择查询插入 magazine_subscription_id, subscription_name, magazine_id, status 上述问题,你有 magazine_subscription_id, subscription_name, magazine_id, status 1这是不可能的。

如果你想插入或者你需要使用直接值

0
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)) 
+0

这不起作用,因为选择周围的额外父母不工作。请参阅文档: http://dev.mysql.com/doc/refman/5.0/en/insert-select.html 它的INSERT INTO db(列)SELECT列FROM WHERE blah = 1; – transformerTroy 2014-09-08 12:22:25

-1
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);
+3

BAD MYSQL是什么意思?如果我们在DESTINATION_TABLE中已经有了一些数据呢? – 2015-06-26 06:02:01

+2

这并不回答有关两个表中列数不同的INSERT/SELECT的问题... – Marki555 2015-06-26 09:53:03

+1

原始问题中的人员可能在目标表中有数据。由于这种可能性,放下桌子听起来不像是一个好的多用途答案。 – chrisfs 2015-09-02 19:31:53

3

其实从一个表到另一个用于复制数据的MySQL查询是
Insert into table2_name (column_names) select column_name from table1
其中,从表1复制的值表2

-2
INSERT INTO mt_magazine_subscription SELECT * 
     FROM tbl_magazine_subscription 
     ORDER BY magazine_subscription_id ASC 
12

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

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

我认为这是最好的答案 – 2016-12-25 22:54:34

+0

令人惊叹。但我有一个问题:为什么这个工作?这个'select'返回到'insert into'? – 2017-07-15 17:23:12

1

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

INSERT INTO php (SELECT * FROM php); 

我可能得到这个错误:

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

因此,这里的解决方案,我排除了 “标识” 键:

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

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

相关问题