正如标题所说,我试图在一个表中插入另一个表中的值和一些默认值。
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错误,第二个查询给出了列数不匹配。
我需要做什么?
答案 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;