2013-03-20 118 views
36

有没有一种方法可以插入来自select-query的预设值和值? 例如:MySQL INSERT INTO ... VALUES和SELECT

INSERT INTO table1 VALUES ("A string", 5, [int]). 

我有“的字符串”和5号的价值,但我已经找到从选择这样的[INT值:

SELECT idTable2 
FROM table2 
WHERE ... 

那给我这个ID放在table1里面。

如何合并成一个语句?

回答

62

使用insert ... select查询,并把已知值在select

insert into table1 
select 'A string', 5, idTable2 
from table2 
where ... 
+1

我用这种方法发现的一个问题是,如果'SELECT'返回零个记录,那么该语句成功,但没有数据是'INSERT'。 – 2014-02-13 01:52:18

+2

@ NeilC.Obremski:是的,但这只是一个问题,如果你期望结果是别的。如果你想在这种情况下发生错误,你可以使用子查询。 – Guffa 2014-02-13 02:02:27

+0

非常感谢你,我在网上搜索这个 – ComradeJoecool 2017-10-23 16:41:04

1

尝试以下操作:

INSERT INTO table1 
SELECT 'A string', 5, idTable2 idTable2 FROM table2 WHERE ... 
46

只使用子查询就在那里,如:

INSERT INTO table1 VALUES ("A string", 5, (SELECT ...)). 
+2

+1,提供了一个如何使用'VALUES'语法的例子。 – EleventyOne 2013-12-26 23:22:40

+1

这种方法可能会给出一个错误,比如“多于一行” – 2014-03-20 09:10:27

+5

它应该是“INSERT INTO table1 VALUES(”A string“,5,(SELECT ... LIMIT 1))。” – Rahnzo 2015-09-22 15:38:03

0

试试这个:

INSERT INTO table1 SELECT "A string", 5, idTable2 FROM table2 WHERE ... 
1
INSERT INTO table1 (col1, col2) 
SELECT "a string", 5, TheNameOfTheFieldInTable2 
FROM table2 where ... 
8

试试这个

INSERT INTO TABLE1 (COL1 , COL2,COL3) values 
('A STRING' , 5 , (select idTable2 from Table2)) 
where ... 
+4

“SELECT”表中的多个列怎么样?如果我尝试使用多个列,我会得到'操作数应该包含1列'。 – 2014-02-13 01:54:44

5

所有其他的答案来解决这个问题,我的回答工作方式与别人一样,只是一个更说教方式(这对MySQL工作...不知道其他SQL服务器):

INSERT INTO table1 SET 
    stringColumn = 'A String', 
    numericColumn = 5, 
    selectColumn = (SELECT idTable2 FROM table2 WHERE ...); 

您可以参考MySQL文档:INSERT Syntax

10
 
INSERT INTO table_name1 
      (id, 
      name, 
      address, 
      contact_number) 
SELECT id, name, address, contact_number FROM table_name2;