如何选择ID等于其他ID的表

时间:2019-03-17 18:10:21

标签: sql-server tsql

我有表StudentPlatoStudentsStudent.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

在您的帮助之后!我的决定(警告字段必须为空)

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 个答案:

答案 0 :(得分:1)

据我所知,当与id匹配时,您想使用表PlatoStudents中的值更新Student表中的值。尝试这样的事情:

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);

如果您不需要为不存在的ID插入数据,请省去“何时未按目标匹配”部分。

答案 1 :(得分:0)

首先,根据WHERE子句判断,您似乎正在尝试使用INSERT语句将数据插入到目标表中至少已经存在某些数据的行中。

由于目标表中已经有与WHERE子句中列出的列匹配的行,因此对此应使用INSERT,而应使用INSERT。

INSERT语句将新行插入表中。 UPDATE语句使您可以将数据发送到目标表中的现有行中,替换那些行中指定列中可能已经存在的所有数据。

还有一个观察结果:看来您正在尝试将“姓氏”列值中的值插入目标表中的“中间名”列中。我意识到某些文化有多个姓氏,所以这可能是故意的,但我想指出一点。