タイトルにあるように、別のテーブルの値とデフォルト値を選択して、1つのテーブルに挿入しようとしています。
INSERT INTO def (catid, title, page, publish)
(SELECT catid, title from abc),'page','yes')
INSERT INTO def (catid, title, page, publish)
VALUES
((SELECT catid, title from abc),'page','yes'))
最初のクエリはmysqlエラーを返し、2番目のクエリは列数が一致しないことを示します。
何をする必要がありますか?
あなたはただやらなければなりません:
INSERT INTO def (catid, title, page, publish)
SELECT catid, title, 'page','yes' from `abc`
すべての列を挿入する場合は、
insert into def select * from abc;
ここで、defの列数はabcと等しくなければなりません。
列のサブセットを挿入する場合
insert into def (col1,col2, col3 ) select scol1,scol2,scol3 from abc;
ハードコードされた値を挿入する場合
insert into def (col1, col2,col3) select 'hardcoded value',scol2, scol3 from abc;
ソーステーブルのサブセットをコピーする場合は、次の操作を実行できます。
INSERT INTO def (field_1, field_2, field3)
SELECT other_field_1, other_field_2, other_field_3 from `abc`
またはALL fieldsをコピー元テーブルからコピー先テーブルにコピーするには、もっと簡単にできます:
INSERT INTO def
SELECT * from `abc`
INSERT INTO def (field_1, field_2, field3)
VALUES
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')
MySQLでは、自動インクリメントの主キーを持つテーブルに挿入し、NOW()
などの組み込みMySQL関数を使用する場合、次のようなことができます。
INSERT INTO course_payment
SELECT NULL, order_id, payment_gateway, total_amt, charge_amt, refund_amt, NOW()
FROM orders ORDER BY order_id DESC LIMIT 10;