114

正如标题所说,我试图插入一个表,从另一个表中选择值和一些默认值。

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 错误,第二个查询给出了列数不匹配。

我需要做什么?

4

5 回答 5

255

你只需要做:

INSERT INTO def (catid, title, page, publish) 
SELECT catid, title, 'page','yes' from `abc`
于 2011-05-06T05:38:44.970 回答
12

如果要插入所有列,则

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;
于 2016-09-08T06:57:57.323 回答
11
INSERT INTO def (field_1, field_2, field3) 
VALUES 
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')
于 2017-03-20T18:13:11.517 回答
8

如果要复制源表的子集,可以执行以下操作:

INSERT INTO def (field_1, field_2, field3)

SELECT other_field_1, other_field_2, other_field_3 from `abc`

或将所有字段从源表复制到目标表,您可以更简单地执行以下操作:

INSERT INTO def 
SELECT * from `abc`
于 2013-10-23T12:22:18.817 回答
3

使用 MySQL,如果您要插入具有自动增量主键的表,并且您想使用内置的 MySQL 函数,例如,NOW()您可以执行以下操作:

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;
于 2014-04-02T12:35:00.873 回答