【问题标题】:Updating a table using JOIN by calculating result from multiple rows通过计算多行的结果使用 JOIN 更新表
【发布时间】:2015-02-25 11:59:18
【问题描述】:

我有两张表如下:

ObjNameRptName 是一个复合键。

表 1:

 ObjName | RptName | FileName | Success
 ----------------------------------------
 obj1    | rept1   | file1.csv| NULL

表 2:

FileName  | Success
-------------------
file1.csv | 1
file1.csv | 0
file1.csv | 0

表 2 可以有多个条目,如上。

这些表必须在 FileName 上连接。

我想根据以下条件更新表 1 的 Success 列:

如果结果集中的任何条目(加入表格后获得)的 Success 值为“1”,则表 1 的 SUCCESS 列应更新为“1”。否则应设置为“0”。

请帮忙。

【问题讨论】:

  • 您使用的是哪个 DBMS?
  • @deterministicFail SQL Server 2008 R2

标签: sql sql-server sql-server-2008 join sql-update


【解决方案1】:

试试这个:

UPDATE a 
SET a.Success = COALESCE(b.Success, 0) 
FROM table1 a 
LEFT OUTER JOIN table2 b ON a.FileName = b.FileName AND b.Success = 1;

【讨论】:

  • 这有帮助。谢谢。 :)
【解决方案2】:

是的,通过加入你可以轻松实现它,请尝试这样做,希望这能解决你的问题:)

UPDATE
    table1
SET 
    Sucess = 1
WHERE
    EXISTS
         (
             SELECT 
                 1 
             FROM
                 TABLE2 t2
                 LEFT JOIN TABLE1 t1 ON t1.FileNmae  = t2.FileName
                 AND t2.successvalue = 1
          )

【讨论】:

    【解决方案3】:
    update t1 
    set success = 
      case 
        when exists (select * from t2 where FileName = t1.FileName and Success = 1) then 1 
        else 0 
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-04-26
      • 2016-05-02
      • 2020-01-28
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-14
      相关资源
      最近更新 更多