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

sta*_*low 56 mysql select subquery insert-into

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

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

     (
      "Henry"
     ),
    );
Run Code Online (Sandbox Code Playgroud)

WANT来填充新表与此子查询返回的所有结果.如何在不获取ERROR 1242(21000)的情况下执行此操作:子查询返回超过1行

Rya*_*yan 110

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

将静态字符串Henry与您的SELECT查询组合在一起.

  • 如果我有多个名字怎么办?不仅'亨利'和我需要_iterate_而不是他们. (9认同)

小智 10

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

     (
      "Henry"
     ),
    );
Run Code Online (Sandbox Code Playgroud)

  • 欢迎来到Stack Overflow!请解释*为什么此代码解决了所提出的问题,而不是仅发布一段代码.没有解释,这不是答案. (9认同)
  • 这并没有真正回答这个问题.它是"[...] _populate新表,**所有结果**从此子查询返回",这将子查询结果限制为一行.(我知道这个答案已经超过4年了,但我认为无论如何我都会指出这一点.) (3认同)

Mig*_*Mac 8

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

使用值在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);
Run Code Online (Sandbox Code Playgroud)

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

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);
Run Code Online (Sandbox Code Playgroud)

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


tri*_*san 6

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


小智 5

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