web-dev-qa-db-ja.com

mysql-> tbl(別のテーブルから選択)に挿入し、いくつかのデフォルト値

タイトルにあるように、別のテーブルの値とデフォルト値を選択して、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番目のクエリは列数が一致しないことを示します。

何をする必要がありますか?

95

あなたはただやらなければなりません:

INSERT INTO def (catid, title, page, publish) 
SELECT catid, title, 'page','yes' from `abc`
226
Nican

すべての列を挿入する場合は、

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;
8
kanishka vatsa

ソーステーブルのサブセットをコピーする場合は、次の操作を実行できます。

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`
7
Redips77
INSERT INTO def (field_1, field_2, field3) 
VALUES 
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')
4
Frankie

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;
2
crmpicco