根据条件更新表

时间:2019-07-01 09:43:11

标签: sql sql-server

我有一列Table1.Tradedate和另一列Table2.SettlementDate。 基于这两个之间的比较,我想更新表2中的一列

IF (Table1.TradeDate <= Table2.SettlementDate)
BEGIN
UPDATE Table2 SET Status='Y'
END

这是我尝试过的方法,但我知道它是错误的,因为该表显然将包含1条以上的记录。因此,我相信我应该做的是

  1. 在基于某些@id的2个表上使用联接以选择特定记录
  2. 检查该特定记录的IF条件
  3. 更新Status中的table2列。

我希望我的方法是正确的,但是我写错了。

表1:

SKacc | Name | TradeDate   | Othercolumns....
1     | xxx  |  01/07/2019 |
2     | xxx  |  01/06/2019 |

表2:

SKAcc | Name | SettlementDate | Status |Other Columns....
1     | xxx  |  01/08/2019    | NULL   |
2     | xxx  |  01/08/2019    | NULL   |

3 个答案:

答案 0 :(得分:3)

尝试以下

update t2 set Status = 'Y'
from table2 t2
join table1 t1 on t1.id = t2.id
where t1.tradeDate <= t2.settlementDate

答案 1 :(得分:2)

尝试将两个表与相关列结合在一起,然后使用该值更新要更新的表。在示例中使用内部联接,但可以根据用例进行更改

UPDATE Table2 
  SET Status = 'Y'
  FROM Table2
  INNER JOIN Table1 ON Table1.id = Table2.table1_id
  WHERE Table1.TradeDate <= Table2.SettlementDate

答案 2 :(得分:1)

为此,我不建议使用JOIN。相反:

update table2
    set Status = 'Y'
    where exists (select 1
                  from table1 t1
                  where t1.id = t2.id and
                        t1.tradeDate <= t2.settlementDate
                 );

我之所以推荐这个版本,是因为您没有指定idtable1中是唯一的。通常,只有在可以保证只有一个匹配行的情况下,才希望在JOIN中使用UPDATE