【发布时间】:2015-02-04 08:53:32
【问题描述】:
我有一个包含 3 列(classID - INT、teacherID INT、isActive BOOLEAN)的 TABLE (Classes_Teachers)。
我读取了一个新文件的内容并创建了一个具有相同列但具有最新数据的表 (StudentsTemp),并希望将两者“合并”。
我可以使用 EXCEPT AND JOIN 轻松完成此操作,但是这将删除 StudentsTemp 中不存在的所有学生行,但是我需要能够将 isActive 设置为 false,因为我必须保留报告数据目的。
这是一个用于多对多关系的“JOIN”表,因此它没有单个主键。
例如
学生:
+----------------------------------+ | ClassID TeacherID isActive | +----------------------------------+ | 1 2 1 | | 1 12 1 | | 1 13 0 | | 5 10 1 | +----------------------------------+学生的温度
+----------------------------------+ | ClassID TeacherID isActive | +----------------------------------+ | 1 2 1 | | 1 13 1 | | 1 6 1 | +----------------------------------+在这种情况下,第 5 班不再由教师 10 教授,因此该条目通常会被“删除”,但我只想将“isActive”更改为 0
第 1 课也不再由教师 12 教授,因此这应该将 isActive 更改为 0。
第 1 班现在由 13 号老师代替; ie 现在是“活动的”,所以这会将 isActive 更改为 1
最后,有一个全新的教师 (id = 6),他教授的 classID 为 1,所以这会按原样插入行。
我需要学生像这样结束:
+----------------------------------+ | ClassID TeacherID isActive | +----------------------------------+ | 1 2 1 | | 1 12 0 | | 1 13 1 | | 5 10 0 | | 1 6 1 | +----------------------------------+我可以通过创建 3 个临时表并使用 EXCEPT AND JOIN 来使用“删除”、“更改”和“插入”填充这些表,然后对它们运行 UPDATE AND INSERT 来做到这一点,但我想知道是否有无需创建 3 个额外的临时表即可更轻松地执行此操作。
【问题讨论】:
标签: sql sql-server tsql