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

wan*_*mer 96 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'))
Run Code Online (Sandbox Code Playgroud)

第一个查询给出了mysql错误,第二个查询给出了列数不匹配.

我需要做什么?

Nic*_*can 231

你只需要这样做:

INSERT INTO def (catid, title, page, publish) 
SELECT catid, title, 'page','yes' from `abc`
Run Code Online (Sandbox Code Playgroud)

  • 另一个重要的注意事项:不同类型的报价做不同的事情.\`field \`是字段名称,而'value'是值. (3认同)
  • 一个重要的注意事项:您必须从第一行中要写入的表中放置列的名称,并且您正在读取的表中的列名称将放在第二行上.所以在这个答案中,`catid`和`title`并没有指向同一个表. (2认同)
  • 请注意,未使用关键字VALUES (2认同)

小智 8

如果要插入所有列

insert into def select * from abc;
Run Code Online (Sandbox Code Playgroud)

这里def中的列数应该等于abc.

如果你想插入列的子集然后

insert into def (col1,col2, col3 ) select scol1,scol2,scol3 from abc; 
Run Code Online (Sandbox Code Playgroud)

如果你想插入一些硬编码值

insert into def (col1, col2,col3) select 'hardcoded value',scol2, scol3 from abc;
Run Code Online (Sandbox Code Playgroud)


Fra*_*kie 8

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


小智 7

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

INSERT INTO def (field_1, field_2, field3)

SELECT other_field_1, other_field_2, other_field_3 from `abc`
Run Code Online (Sandbox Code Playgroud)

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

INSERT INTO def 
SELECT * from `abc`
Run Code Online (Sandbox Code Playgroud)