Как выбрать в таблицу, где идентификатор равен другому идентификатору - PullRequest
0 голосов
/ 17 марта 2019

У меня есть таблицы Student и PlatoStudents. Student.id равно PlatoStudents.id.

Как я могу перейти от одной информации к другой?

Код, где я пытаюсь мигрировать, но он не работает

INSERT INTO Students (FirstName, MiddleName, LastName, City, Phone, SpecializationId, ProfessionId, IIN, BurnDate, Course)
    SELECT 
        firstname, lastname, patronymic, city, phone, SpecializationId,
        ProfessionID, iinplt, BirthDate, CourseNumber 
    FROM 
        PlatoStudents
    WHERE 
        Students.PlatoId = PlatoStudents.StudentID

после вашей помощи! Мое решение (поле WARNING должно быть пустым)

UPDATE MY
   SET MY.FirstName = OTHER.firstname,
       MY.LastName = OTHER.patronymic,
       MY.MiddleName = OTHER.lastname,
       MY.City = OTHER.city,
       MY.Phone = OTHER.phone,
       MY.SpecializationId = OTHER.SpecializationId,   
       MY.ProfessionId = OTHER.ProfessionID,   
       MY.IIN = OTHER.iinplt,  
       MY.BurnDate = OTHER.BirthDate,
       MY.Course = OTHER.CourseNumber
FROM Students AS MY
INNER JOIN PlatoStudents AS OTHER
   ON MY.PlatoId = OTHER.StudentID 
WHERE MY.PlatoId = OTHER.StudentID 

Ответы [ 2 ]

1 голос
/ 17 марта 2019

Как я понял, вы хотите обновить значения в таблице учеников, так же как и в таблице PlatoStudents, если они совпадают по id.Попробуйте что-то вроде этого:

MERGE INTO Students s -- the target table
USING PlatoStudents ps -- the source table
ON
s.PlatoId = ps.StudentID -- condition for updating
WHEN MATCHED THEN -- when condition is met, do an update 
UPDATE SET
s.Firstname = ps.Firstname,
s.LastName = ps.LastName, 
-- ... continue with all columns here
WHEN NOT MATCHED BY TARGET THEN -- when condition not met(e.g.new student), insert it 
INSERT VALUES (FirstName, MiddleName, LastName, City, Phone, SpecializationId, ProfessionId, IIN, BurnDate, Course);

Если вам не нужно вставлять данные для несуществующего идентификатора, пропустите часть «КОГДА НЕ СОГЛАСОВАНО ПО ЦЕЛЯМ».

0 голосов
/ 17 марта 2019

Во-первых, судя по предложению WHERE, похоже, что вы пытаетесь использовать инструкцию INSERT для вставки данных в строки, где хотя бы некоторые данные уже существуют в целевой таблице.

Поскольку у вас уже есть строки в целевой таблице, которые соответствуют столбцу, указанному в предложении WHERE, вместо этого используйте INSERT для этого, вы должны использовать UPDATE.

Оператор INSERT вставляет новые строки в таблицу.Оператор UPDATE позволяет отправлять данные в существующие строки в целевой таблице, заменяя любые данные, которые могут уже находиться в указанных столбцах в этих строках.

Кроме того, просто наблюдение: оноПохоже, вы пытаетесь вставить значения из значения столбца «lastname» в столбец «MiddleName» в целевой таблице.Я понимаю, что в некоторых культурах есть несколько фамилий, так что это может быть преднамеренным, но я хотел указать на это.

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