一起插入(选择和值)

ran*_*and 3 mysql sql insert-into

我正在尝试INSERT INTO一张桌子,我知道2种方法:

将行添加为值:

INSERT INTO db_example.tab_example (id,name,surname,group)
VALUES ('','Tom','Hanks','1');
Run Code Online (Sandbox Code Playgroud)

或从另一个表:

INSERT INTO db_example.tab_example (id,name,surname)
SELECT ID,first_name,last_name FROM db_contacts.tab_mygroup;
Run Code Online (Sandbox Code Playgroud)

但是,如果我想从另一个表中插入一些值(第二种方法),而手动插入一些值(如默认值)(第一种方法),该怎么办呢?

这是我的尝试(没有用):

INSERT INTO db_example.tab_example (id,name,surname,group)
VALUES (
 SELECT ID FROM db_contacts.tab_mygroup,
 SELECT first_name FROM db_contacts.tab_mygroup,
 SELECT last_name FROM db_contacts.tab_mygroup,
 '1'
);
Run Code Online (Sandbox Code Playgroud)

我想创建一个VIEW表,它可能会解决问题,但我认为可能会有某种方式将两者加在一起。

感谢大伙们!我希望我能很好地描述我的需求:)

spe*_*593 5

只需从SELECT语句返回文字值即可;将一个表达式添加到SELECT列表中。例如:

INSERT INTO db_example.tab_example (id,name,surname,group)
SELECT ID
     , first_name
     , last_name
     , '1' AS group
  FROM db_contacts.tab_mygroup;
Run Code Online (Sandbox Code Playgroud)

跟进

问:我可以使用AS函数在同一列中选择first_name和last_name吗?还是我需要其他功能?

答:如果你想要的值在合并first_namelast_name成一列,你可以使用表达式将它们连接起来,并使用SELECT列表表达式,如

CONCAT(last_name,', ',first_name')
Run Code Online (Sandbox Code Playgroud)

要么

CONCAT(first_name,' ',last_name)
Run Code Online (Sandbox Code Playgroud)

AS关键字不会有一个背景下产生任何影响INSERT ... SELECT,但分配一个别名到表达的表达被插入并作为未来读者的帮助下,列的名称相匹配。

INSERT INTO db_example.tab_example (id,name,surname,group,full_name)
SELECT ID
     , first_name
     , last_name
     , '1' AS group
     , CONCAT(first_name,' ',last_name) AS full_name
  FROM db_contacts.tab_mygroup
Run Code Online (Sandbox Code Playgroud)