首页 > 解决方案 > MS SQL Server - 如果它匹配另一个视图中列中的多个条件,则更新表行

问题描述

我的情况与下面的示例表描述非常相似

我有“学校”表

学校编号 学校名称 原则ID 学校校长名称
1 南德克萨斯 1 朱莉娅·彼得森
2 北德克萨斯 2 尚雅各布斯
3 德克萨斯中部 3 艾琳娜·夏洛克

上表具有非规范化列 SchoolPrincipleName

还有另一个 ViewSchoolWithOutPrinciple 数据库视图

学校编号 原则ID IsSchoolWithOut原则
1 1 真的
2 2 错误的

现在我必须根据 ViewSchoolWithOutPrinciple 数据库视图对“学校”表中的 SchoolPrincipleName 列进行更正

对于 ViewSchoolsWithOutPrinciple 和 IsSchoolWithOutPrinciple 中存在 SchoolId 和 PrincipleId 的行,我必须将“School”表中的 SchoolPrincipleName 列更新为空或 null 等于 True

SQL 下面是符号表示,因此它并不意味着工作。

UPDATE
    School
SET 
    SchoolPrincipleName = NULL 
WHERE 
    School.SchooldId     = ViewSchoolsWithOutPrinciple.SchooldId     FROM   ViewSchoolsWithOutPrinciple AND 
    School.PrincipleId   = ViewSchoolsWithOutPrinciple.PrincipleId   FROM   ViewSchoolsWithOutPrinciple AND   
    ViewSchoolsWithOutPrinciple.IsSchoolWithOutPrinciple = True

任何人都可以在这种情况下提供帮助吗?

标签: sql-server

解决方案


你需要使用这样的东西:

UPDATE s
SET SchoolPrincipleName = NULL 
FROM 
    School s
INNER JOIN
    ViewSchoolsWithOutPrinciple v ON v.SchoolId = s.SchoolId
                                  AND v.PrincipalId = s.PrincipalId
WHERE
    v.IsSchoolWithOutPrinciple = True
    -- v.IsSchoolWithOutPrinciple = 1         -- if datatype is BIT
    -- v.IsSchoolWithOutPrinciple = 'True'    -- if datatype is VARCHAR(n)

不完全确定该IsSchoolWithoutPrinciple列的数据类型是什么 - 您可能需要WHERE稍微调整该子句


推荐阅读