添加具有相同值的项目列表的最佳方法是什么

问题描述 投票:1回答:1

我有一个名为enrolled的表,其中包含2列course_id和student_id。我有一个学生5的课程ID列表,例如1,3,4。可以手动执行INSERT INTO `enrolled`(`course_id`, `student_id`) VALUES (1,5),(3,5),(4,5)。有没有更好和更短的方法可以遍历数组,并且只将student_id的值写入一次?]

我正在使用mariadb,mysql。该查询来自节点服务器。

mysql sql select sql-insert
1个回答
2
投票

您可以将值放在派生表中:

INSERT INTO `enrolled`(`course_id`, `student_id`) 
SELECT course_id, 5
FROM (
    SELECT 1 course_id
    UNION ALL SELECT 3
    UNION ALL SELECT 5
) t

这比多个查询更有效,因为它只进行一次往返服务器的往返,而不是三次。

在最新版本的MySQL中,可以使用ROW构造函数:

INSERT INTO `enrolled`(`course_id`, `student_id`) 
SELECT course_id, 5
FROM (VALUES ROW(1), ROW(3), ROW(5)) t(course_id)
© www.soinside.com 2019 - 2024. All rights reserved.