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
私を助けてください。
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
1つのテーブルから別のテーブルにすべてのデータを挿入する場合は、非常に簡単なSQLがあります
INSERT INTO destinationTable (SELECT * FROM sourceDbName.SourceTableName);
このようには動作しません。
クエリを使用して行を挿入しようとすると、クエリにすべての値が存在する必要があります。
上記の問題により、magazine_subscription_id, subscription_name, magazine_id, status
1の選択クエリにmagazine_subscription_id, subscription_name, magazine_id, status
を挿入することはできません。
どちらかを挿入する場合は、直接値のクエリを使用して挿入する必要があります
実際、あるテーブルから別のテーブルにデータをコピーするための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'
だからここに解決策があります、私は「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 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)
)