我有一列Table1.Tradedate
和另一列Table2.SettlementDate
。
基于这两个之间的比较,我想更新表2中的一列
IF (Table1.TradeDate <= Table2.SettlementDate)
BEGIN
UPDATE Table2 SET Status='Y'
END
这是我尝试过的方法,但我知道它是错误的,因为该表显然将包含1条以上的记录。因此,我相信我应该做的是
@id
的2个表上使用联接以选择特定记录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 |
答案 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
);
我之所以推荐这个版本,是因为您没有指定id
在table1
中是唯一的。通常,只有在可以保证只有一个匹配行的情况下,才希望在JOIN
中使用UPDATE
。