首页 > 解决方案 > 更新特定案例的选择

问题描述

我有一个包含数百个表的大型数据库。所以我做了一个选择,给了我需要的数据。我现在想根据情况从一列更新所有行的值。

我知道这与 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.

标签: sqlsql-server

解决方案


我想你想要这样的东西:

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.


推荐阅读