我有一个名为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。该查询来自节点服务器。
您可以将值放在派生表中:
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)