mysql - >插入到tbl(从另一个表中选择)和一些默认值

时间:2011-05-06 05:36:35

标签: mysql insert-into

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

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

我需要做什么?

5 个答案:

答案 0 :(得分:220)

你必须这样做:

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

答案 1 :(得分:8)

如果要插入所有列,则

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;

答案 2 :(得分:7)

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

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`

答案 3 :(得分:4)

INSERT INTO def (field_1, field_2, field3) 
VALUES 
('$field_1', (SELECT id_user from user_table where name = 'jhon'), '$field3')

答案 4 :(得分:2)

使用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;