从另外两个具有一对多关系的表插入第三个表

问题描述 投票:0回答:3

我有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
sql sqlite inner-join sql-insert
3个回答
0
投票

您需要选择两列并使用 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)

0
投票
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


0
投票

这里不需要连接——也不需要临时表。

你想插入一个固定的作业值,所以我们可以直接从学生表中插入/选择:

INSERT INTO `teacher_board` (`student_id`, `homework_id`) 
SELECT `id`, 1 FROM `student` 

这为每个学生插入一行,作业 1.

© www.soinside.com 2019 - 2024. All rights reserved.