我有一个名为登记的表,有 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。查询来自节点服务器。
我有一个名为登记的表,有 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)