web-dev-qa-db-ja.com

mysqlで1つのテーブルから別のテーブルにデータを挿入する

1つのテーブルからすべてのデータを読み取り、いくつかのデータを別のテーブルに挿入したい。私のクエリは

  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

私を助けてください。

51
deepu sankar

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 
102
Gustav Bertram

1つのテーブルから別のテーブルにすべてのデータを挿入する場合は、非常に簡単なSQLがあります

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

このようには動作しません。

クエリを使用して行を挿入しようとすると、クエリにすべての値が存在する必要があります。

上記の問題により、magazine_subscription_id, subscription_name, magazine_id, status 1の選択クエリにmagazine_subscription_id, subscription_name, magazine_id, statusを挿入することはできません。

どちらかを挿入する場合は、直接値のクエリを使用して挿入する必要があります

5
Praveen

実際、あるテーブルから別のテーブルにデータをコピーするためのmysqlクエリは
Insert into table2_name (column_names) select column_name from table1
ここで、table1からtable2にコピーされた値

3
php

「id」のような主キーがある場合、たとえば、私のphpテーブルにはid、col2、col3、col4列があります。 idは主キーなので、このコードを実行すると:

INSERT INTO php  (SELECT * FROM php);

私はおそらくこのエラーを受け取ります:

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

だからここに解決策があります、私は「id」キーを除外しました:

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

したがって、私の新しいphpテーブルには、すべてのphp2テーブル行が含まれています。

2
BARIS KURT
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));
1
Guryash Singh
  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
arvin_codeHunk

これを試して。間違った方法でやっている。

    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
Amit Garg