我有表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
在您的帮助之后!我的决定(警告字段必须为空)
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
答案 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语句使您可以将数据发送到目标表中的现有行中,替换那些行中指定列中可能已经存在的所有数据。
还有一个观察结果:看来您正在尝试将“姓氏”列值中的值插入目标表中的“中间名”列中。我意识到某些文化有多个姓氏,所以这可能是故意的,但我想指出一点。