Sql 通过计算多行的结果,使用JOIN更新表

Sql 通过计算多行的结果,使用JOIN更新表,sql,sql-server,sql-server-2008,join,sql-update,Sql,Sql Server,Sql Server 2008,Join,Sql Update,我有两个表格如下: ObjName和RptName是一个复合键 表1: ObjName | RptName | FileName | Success ---------------------------------------- obj1 | rept1 | file1.csv| NULL 表2: FileName | Success ------------------- file1.csv | 1 file1.csv | 0 file1.csv | 0 表2可以有多个

我有两个表格如下:

ObjName
RptName
是一个复合键

表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
列:

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

请帮助。

试试这个:

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;

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


您使用的是哪种DBMS?@deterministicFail SQL Server 2008 R2,这很有帮助。谢谢。:)
update t1 
set success = 
  case 
    when exists (select * from t2 where FileName = t1.FileName and Success = 1) then 1 
    else 0 
  end
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
          )