Sql 根据从搜索中找到的ID数量插入动态行数

Sql 根据从搜索中找到的ID数量插入动态行数,sql,sql-server,Sql,Sql Server,我试图在表格中插入未修过某门课程的所有学生的分数(ID、COURSEID、Secu ID、学期、年份、年级)。 我正确地从呼叫表中获取了所需的ID 从学生中选择ID 其中dept_name=‘计算机科学’ 减 从中选择ID 其中course_id='CS-347'; 然后我用我检索到的这些ID实际插入它,所有其他用于插入的字段都是静态的 insert-into-take 选择ID,'CS-347'作为课程ID,1作为SEC_ID,'Spring'作为学期,2021年作为年级,空作为年级 来自学

我试图在表格中插入未修过某门课程的所有学生的分数(ID、COURSEID、Secu ID、学期、年份、年级)。 我正确地从呼叫表中获取了所需的ID

从学生中选择ID
其中dept_name=‘计算机科学’
减
从中选择ID
其中course_id='CS-347';
然后我用我检索到的这些ID实际插入它,所有其他用于插入的字段都是静态的

insert-into-take
选择ID,'CS-347'作为课程ID,1作为SEC_ID,'Spring'作为学期,2021年作为年级,空作为年级
来自学生
其中dept_name=‘计算机科学’
减
从中选择ID
其中course_id='CS-347';
然后我得到一个错误:

结果列数不正确


我知道我只是从Student列中提取,但我不确定如何解决这个问题,因为我尝试单独选择ID,但也没有成功。

您可以使用此查询:

insert into  TAKES (column names)
SELECT
    ID,
    'CS-347' as COURSE_ID,
    1 as SEC_ID,
    'Spring' as SEMESTER,
    2021 as YEAR,
    NULL as GRADE
from
    student
where
    dept_name = 'Computer Science' 
and ID NOT IN  (select
    ID
from
    takes
where
    course_id = 'CS-347');

当您使用减法运算时,两边需要返回相同数量的列。另外,请确保插入了正确的列,最好提及列名

Mysql不支持减号运算符,因此此代码不可能用于Mysql。
不在
通常是最好避免的,因为可空列存在问题,最好使用
不存在
除了
@ConnorMills。这个答案强调,虽然集合运算在理论上很有吸引力,但在实践中,它们往往只解决一个问题,而且不太灵活。