首页 > 解决方案 > 在 MySQL 中循环使用多行的 SQL 结果

问题描述

假设我有一个“源表”,其中包含一些行,在本例中为四行。现在,我想为源表中的每一行将新行插入到“目标表”中。

我目前的说法是:

SET @id = 1;
INSERT INTO target_table (id, value)
VALUES (@id, 1),
       (@id, 2),
       (@id, 3),
       (@id, 4);

但是我想做这样的事情......

SET @id = 1;
myResultSet = SELECT value FROM source_table;
FOR EACH value in myResultSet
    INSERT INTO target_table (@id, @value)
END

标签: mysql

解决方案


您可以使用Insert ... Select声明:

INSERT INTO `target_table` (`id`, `value`) 
SELECT 1, `value` 
FROM `source_table` 

从下面的语法中可以看出这个语句的完全可能性:

INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [(col_name [, col_name] ...)]
    SELECT ...
    [ON DUPLICATE KEY UPDATE assignment_list]

value:
    {expr | DEFAULT}

assignment:
    col_name = value

assignment_list:
    assignment [, assignment] ...

推荐阅读