SQL:删除重复的记录并同时更新外键

时间:2019-02-28 10:09:15

标签: sql sql-server

Student Table
Id   Name   Age   SectionId
1    Ray    12    1
2    May    11    2
3    Fae    12    3
4    Jay    11    4
5    Zoe    12    5

Section Table
Id   SectionName   Priority
1    A             1
2    B             2
3    A             1
4    B             2
5    A             1

我有上面的两个sql表。我的代码失败,因为为每个具有相同年龄的学生创建了重复的科记录。预期结果应为:
 1.仅应创建2个部分记录(A和B部分)
 2. Ray,Fae和Zoe的SectionId应该为1。
 3. May和Jay的SectionId应该为2。

我很难创建一个脚本来更正数据库中的现有记录。您能帮我还是指出正确的方向来创建一个脚本,该脚本将:
 1.删​​除重复的科目记录(编号3、4、5)
 2.并更新学生的SectionId的值

非常感谢所有帮助,谢谢……

编辑:

SELECT SectionName, Priority, COUNT(*)
FROM Section
GROUP BY SectionName, Priority
HAVING COUNT(*) > 1

当前我只能找到重复的记录

1 个答案:

答案 0 :(得分:1)

您首先需要update错误的部分ID,然后进行delete查询以删除不需要的部分,如下所示。

update s
    set s.SectionId =(select min(s1.id) from section s1
    inner join section s2 on s1.sectionname=s2.sectionname
    where s2.id=s.sectionid)
from  student s

其次是删除

delete from section where id> 2

注意:要进行删除,如果还有其他有效记录,则可能需要附加诸如and SectionName in ('a','b')之类的条件。

Online Demo