MySQL如何使用返回多行的SELECT子查询INSERT INTO表?

时间:2012-02-23 22:37:57

标签: mysql select subquery insert-into

MySQL如何使用SELECT子查询返回多行来插入表?

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

     (
      "Henry"
     ),
    );

想要来填充新表,其中包含从此子查询返回的所有结果。如何在不获取 ERROR 1242(21000)的情况下执行此操作:子查询返回的行数超过1行

7 个答案:

答案 0 :(得分:105)

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

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

答案 1 :(得分:11)

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

     (
      "Henry"
     ),
    );

答案 2 :(得分:7)

以下是我发现效果很好的内容。它有点长,但很多时候需要改变额外的数据。

使用值从table2向table1插入多行。 实施例:

hidden

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

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);

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

答案 3 :(得分:5)

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

答案 4 :(得分:1)

此错误的原因(子查询返回多于1行)是您使用括号()。仔细看看最好的答案。它不包含子查询周围的parethesis

答案 5 :(得分: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 )

答案 6 :(得分:-1)

插入ec_element(parentid,name)从ec_element中选择elementid,'STARTUP',其中name ='BG';

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