sql - 更新特定案例的选择
问题描述
我有一个包含数百个表的大型数据库。所以我做了一个选择,给了我需要的数据。我现在想根据情况从一列更新所有行的值。
我知道这与 UPDATE 和 SET 的情况有关,但我不掌握确切的语法。我在访问特定列时遇到问题。
SELECT *
FROM Table1
LEFT JOIN Table2 on Table1.ID=Table2.ID
LEFT JOIN Table3 on Table2.Item = Table3.Item
WHERE Table3.Item in (SELECT ChildItem
FROM Table4
WHERE Item=1000)
所以这是所有列的选择语句。现在在其中一个表中有一个名为 columnA 的列。
When ColumnB=0 and ColumnC<> 0 then ColumnA should be 1
When ColumnB<>0 and ColumnC=0 then ColumnA Should be 0
Else Column A Should not be changed.
解决方案
我想你想要这样的东西:
UPDATE Table1
SET COLUMNA = (CASE WHEN ColumnB=0 and ColumC <> 0 THEN 1 ELSE 0 END)
FROM Table1 LEFT JOIN
Table2
ON Table1.ID = Table2.ID LEFT JOIN
Table3
ON Table2.Item = Table3.Item
WHERE Table3.Item IN (SELECT TABLE4.ChildItem
FROM Table4)
WHERE TABLE4.Item = 1000
);
我猜这TABLE1
是要更新的表。
您对值的描述COLUMNA
并未涵盖所有可能性。您也LEFT JOIN
可以TABLE3
,但是该WHERE
子句将其变成INNER JOIN
.
推荐阅读
- php - 为什么 PDO fetch() 只返回第一行?
- serial-port - 在 Scilab consol 上复制 Arduino 的串行监视器
- db2 - DB2 连接到没有目录的远程数据库?
- php - 在php中确定什么是土地和什么是水
- javascript - 这种类似 JSON 的数据格式是什么?
- graphql - 将查询/变异操作记录到数据库以进行审计
- c# - Microsoft Graph .Net API:共享 OneDrive 文件夹
- java - 用于检索 csrf 令牌的内置方法
- android - 重新调整片段后的状态栏覆盖工具栏
- c# - 如何在 C# 中要求用户输入有限次数