我有3张桌子:
第一桌 -
Students
:
| ID | NAME |
| -------- | -------- |
| 1 | Student-1|
| 2 | Student-2|
| 3 | Student-3|
第二张桌子 -
Homework
:
| ID | NAME |
| -------- | -------- |
| 1 | Homework-1|
| 2 | Homework-2|
| 3 | Homework-3|
我想将每个 [ID from Students] 插入到第 3 表中的某些 [ID from Homework] 中。最后,第三张表应该是这样的:
第三张桌子 -
Teacher_Board
:
| Student_ID | Homework_ID |
| -------- | ------------- |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
我的 SQL 查询:
INSERT INTO `teacher_board` (`student_id`, `homework_id`)
SELECT `id`
FROM `homework`
INNER JOIN `students` ON `students.id` = `teacher_board.student_id`
WHERE `id` = 1
您需要选择两列并使用 CROSS JOIN
INSERT INTO `teach_board` (`student_id`,`homework_id`)
SELECT
s.id , h.id
FROM `homework` CROSS JOIN `students`
WHERE h.id = 1
更好的方法是添加之前表中不存在的所有新列,这样每次在 hmework 中插入新行时都可以运行它
INSERT INTO `teach_board` (`student_id`,`homework_id`)
SELECT s.`id` , h.id
FROM `homework` CROSS JOIN `students`
WHERE NOt EXISTS ( SELECT 1 FROM `teach_board` WHERE `student_id` = s.id AND `homework_id` = h.id)
DECLARE @t1 TABLE (ID INT NOT NULL IDENTITY (1,1) PRIMARY KEY, [name] varchar(20))
INSERT INTO @t1(name) SELECT ('Student1') UNION select ('Student2') UNION select ('Student3')
--SELECT * FROM @t1
DECLARE @t2 TABLE (ID INT PRIMARY KEY IDENTITY (1,1), [name] varchar(20))
INSERT INTO @t2(name) SELECT ('Homework-1') UNION SELECT ('Homework-2') UNION SELECT ('Homework-3')
--SELECT * FROM @t2
SELECT * FROM @t1 CROSS APPLY @t2
这里不需要连接——也不需要临时表。
你想插入一个固定的作业值,所以我们可以直接从学生表中插入/选择:
INSERT INTO `teacher_board` (`student_id`, `homework_id`)
SELECT `id`, 1 FROM `student`
这为每个学生插入一行,作业 1.