76

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

  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

请帮我。

4

12 回答 12

143

您可以使用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 
于 2013-02-16T07:09:28.240 回答
27

如果要将一个表中的所有数据插入到另一个表中,则有一个非常简单的 sql

INSERT INTO destinationTable  (SELECT * FROM sourceDbName.SourceTableName);
于 2016-10-15T07:17:46.583 回答
5

它不会像这样工作。

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

对于上述问题,您想 magazine_subscription_id, subscription_name, magazine_id, status 在选择查询 中插入magazine_subscription_id, subscription_name, magazine_id, status1 是不可能的。

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

于 2013-02-16T07:07:04.537 回答
4

实际上,将数据从一个表复制到另一个表的 mysql 查询是

Insert into table2_name (column_names) select column_name from table1

其中,从 table1 复制到 table2 的值

于 2013-12-26T11:41:33.803 回答
4

如果有像“id”这样的主键,你必须排除它,例如我的 php 表有:id、col2、col3、col4 列。id 是主键,所以如果我运行此代码:

INSERT INTO php  (SELECT * FROM php2);

我可能会收到此错误:

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

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

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

所以我的新 php 表不再具有所有 php2 表行。

于 2016-12-25T23:03:11.823 回答
2
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));
于 2018-09-26T17:11:30.320 回答
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)
    )
于 2013-02-16T07:05:53.013 回答
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))
于 2013-02-16T07:10:57.180 回答
0

尝试使用这个

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 ;

在 select 子句中使用硬编码值

于 2021-09-10T09:03:11.047 回答
0

在 MySQL 中使用条件将数据从一个表插入到另一个表中,同样适用于 SQL Server。只有不存在的数据会得到更新。两个表具有相同的结构,因此列不需要通过。

insert into table_A
select * from table_A_copy 
where not exists
(
select * from table_A where table_A_copy.clm_a=table_A.clm_a and table_A_copy.clm_b=table_A.clm_b and table_A_copy.clm_c=table_A.clm_c
);
于 2021-11-09T11:42:24.667 回答
-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);
于 2013-09-23T18:47:55.343 回答
-2
INSERT INTO mt_magazine_subscription SELECT *
       FROM tbl_magazine_subscription 
       ORDER BY magazine_subscription_id ASC
于 2014-12-12T09:49:01.853 回答