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

时间:2014-12-29 09:45:22

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

我有两张表格如下:

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"。

请帮忙。

3 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

update t1 
set success = 
  case 
    when exists (select * from t2 where FileName = t1.FileName and Success = 1) then 1 
    else 0 
  end

答案 2 :(得分:0)

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

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
          )