Вставить оператор с подзапросом, который имеет внутренний оператор соединения - PullRequest
0 голосов
/ 31 мая 2019

В моей базе данных SQL Server есть 3 таблицы с именами College, University, OldSyllabus.

Таблица College имеет 1000 строк с такими столбцами, как DateOfJoining, studentName

Таблица University имеет 50 строк с такими столбцами, как DateOfCourseRevision, courseName

Мне нужно написать оператор вставки для отправки записей в таблицу OldSyllabus, сравнив столбец University таблица DateOfCourseRevision с College таблица 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))

Я получаю ошибку:

Подзапрос вернул более 1 значения. Это недопустимо, если подзапрос следует =,! =, <, <=,>,> = Или когда подзапрос используется в качестве выражения.

Ответы [ 2 ]

2 голосов
/ 31 мая 2019

Здесь вы, однако, смешиваете синтаксис INSERT ...VALUES и INSERT...SELECT. В документации приведен пример выполнения инструкции INSERT ... SELECT: вставка данных из других таблиц . Вам нужно убрать круглые скобки (()) вокруг 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;
0 голосов
/ 31 мая 2019

Предполагая, что таблица oldsyllabus таблицы была создана и имеет такие же столбцы, что и колледж, используйте приведенный ниже запрос для извлечения данных из таблицы колледжа и сохранения:

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

В случае таблицы или столбцовне были созданы перейти к: Создать таблицу (структуру) из существующей таблицы Здесь объясняется, как создавать таблицы из существующих

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...