带有带有内部连接语句的子查询的插入语句

时间:2019-05-31 14:56:12

标签: sql sql-server

我的SQL Server数据库中有3个表,分别为CollegeUniversityOldSyllabus

College具有1000行,其中包含诸如DateOfJoiningstudentName

的列

University具有50行,其中包含诸如DateOfCourseRevisioncourseName

的列

我需要编写一条插入语句,通过将OldSyllabusUniversity列与DateOfCourseRevisionCollege列进行比较来推送表DateOfJoining中的记录

通过比较College来将OldSyllabus表中的所有记录插入DateOfCourseRevision <= DateOfJoining

查询:

INSERT INTO [OS].[OldSyllabus] (StudenName, Address) 
VALUES 
    ((SELECT C.Name 
      FROM [COL].[College] AS c 
      INNER JOIN [UNI].[University] AS u ON c.CourseName = u.CourseName 
                                         AND c.Date <= u.Date),
     (SELECT C.Address  
      FROM [COL].[College] AS c 
      INNER JOIN [UNI].[University] AS u ON c.CourseName = u.CourseName 
                                         AND c.Date <= u.Date))

我得到一个错误:

  

子查询返回了多个值。当子查询遵循=,!=,<,<=,>,> =或将子查询用作表达式时,不允许这样做。

2 个答案:

答案 0 :(得分:2)

但是,您在这里正在混合使用INSERT ...VALUESINSERT...SELECT语法。该文档提供了有关如何执行INSERT...SELECT statement: Inserting Data from Other Tables的示例。您需要在()周围加上括号(SELECT),并删除VALUES子句。所以:

INSERT INTO [OS].[OldSyllabus] (StudenName) --Should that be StudentName? 
SELECT C.Name
FROM [COL].[College] AS c
     INNER JOIN [UNI].[University] AS u ON c.CourseName = u.CourseName
                                       AND c.Date <= u.Date;

答案 1 :(得分:-1)

假设表oldsyllabus表已创建并且具有与College相同的列,请使用下面的查询从College表中获取数据并存储:

INSERT INTO `oldsyllabus`(`DateofJoining`, `studentName`) SELECT college.DateofJoining, college.studentName FROM college JOIN university WHERE university.dateOfCourseRevision <= college.DateofJoining;

如果尚未创建表或列,请转到: Create table (structure) from existing table 在此说明如何从现有的表创建表