sql-server - 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
任何人都可以在这种情况下提供帮助吗?
解决方案
你需要使用这样的东西:
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
稍微调整该子句
推荐阅读
- configuration - 如何在 Open Api (swagger) 中删除基本错误控制器
- string - 如何将字符串拆分为 Haskell 中的字符串列表?
- angular - 如何在角度 8 中解析日期 yyyy-MM-dd
- mysql - 如何在 MongoDB 中生成不在集合中的随机字符串?
- laravel - Laravel Seeding 产生的结果是预期的 3 倍
- python - ImageTk 模块有问题
- c# - 使用 gtk# 将文件从程序和拖放文件拖到任何地方(例如桌面等)
- angular - 延迟 Observable
- visual-studio - 在 Visual Studio 2019 中,通过测试的绿色和白色复选图标有什么区别?
- java - SpringBoot缓存,从@Cacheput方法调用@Cacheable方法不起作用