72

MySQL 你如何插入一个带有返回多行的 SELECT 子查询的表?

  INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON d.id  = f.id
     ),

     (
      "Henry"
     ),
    );

用从此子查询返回的所有结果填充新表。如何在不收到错误 1242 (21000) 的情况下执行此操作:子查询返回超过 1 行

4

7 回答 7

136
INSERT INTO Results (People, names )
   SELECT d.id, 'Henry'
   FROM Names f
   JOIN People d ON d.id  = f.id

将静态字符串Henry与您的SELECT查询相结合。

于 2012-02-23T22:40:10.723 回答
13

这是我发现效果很好的方法。它有点长,但很多时候需要重新整理额外的数据。

使用值将多行从 table2 插入 table1。例子:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT col1,col2,col3,col4,col5 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

您可以插入硬编码值以插入多行重复数据:

INSERT INTO table1 (col1, col2, col3, col4, col5) 
SELECT "Value", col2, col3, "1900-01-01","9999-12-31" 
FROM table2 t2 
WHERE t2.val2 IN (MULTIPLE VALUES) 
AND (Another Conditional);

请注意: "Value","1900-01-01","9999-12-31" 将在所有插入的行中重复。

于 2016-04-07T15:41:29.663 回答
9
  INSERT INTO Results
    (
     People,
     names,
    )
    SELECT d.id, 'Henry'
    FROM Names f
    JOIN People d ON d.id  = f.id
于 2012-02-23T22:40:01.423 回答
8
INSERT INTO Results
    (
     People,
     names,
    )
    VALUES
    (
     (
       SELECT d.id
       FROM Names f
       JOIN People d ON (d.id  = f.id) limit 1
     ),

     (
      "Henry"
     ),
    );
于 2012-11-08T12:07:11.143 回答
2

此错误(子查询返回多于 1 行)的原因是您使用了括号()。更仔细地寻找最佳答案。它不包含围绕子查询的括号

于 2018-05-07T09:14:13.303 回答
1

在 MySql 中,可以插入来自字符串的多个值,如下所示,避免重复。谢谢。

   insert into brand(name) select * from ( 
select 'Fender' as name 
union select 'a' 
union ..... ) t 
where not exists (select 1 from brand t2 where t2.name COLLATE latin1_general_ci = t.name COLLATE utf8mb4_unicode_ci )
于 2018-06-10T17:07:42.693 回答
-1

插入 ec_element(parentid,name) select elementid , 'STARTUP' from ec_element where name = 'BG';

insert 语句从满足条件的表中获取值 elementid 和标签字符串。

于 2017-01-31T11:18:12.550 回答