SQL 合并 - 如果在 table 2 中找到值,则更新 table 1

SQL Merge - Update a table 1 if value is found in table 2

我要表 :

Table1
---------------------------
ID         VAL1
---------------------------
1          1
2          null
3          1


Table2
---------------------------
ID         VAL2
---------------------------
1          N
2          O
3          O

如果 Table2 的 VAL2 等于 'O',我想用“0”更新 Table1 的 VAL1 列。 (这两个表可以用ID列连接)。

所以预期的结果是:

    Table1
---------------------------
ID         VAL1
---------------------------
1          1
2          0
3          0

我尝试使用 MERGE 来完成它,但我更新了 0 条记录。这是我的代码:

MERGE
INTO    Table1
USING   (
        SELECT  t1.ID AS T1ID, t2.ID AS T2ID
        FROM    Table1 t1
        JOIN    Table2 t2
        ON      trim(t1.ID)=trim(t2.ID)
        WHERE   t2.VAL2='O'
        )
ON      (T1ID = T2ID)
WHEN MATCHED THEN
UPDATE
SET     VAL1='0';

使用标准更新:

UPDATE Table1
JOIN Table2 ON Table1.ID = Table2.ID
SET Table1.VAL1 = 0
WHERE Table2.VAL2 = 'O'

编辑 没有加入:

UPDATE Table1, Table2
SET Table1.VAL1 = 0
WHERE Table1.ID = Table2.ID
AND Table2.VAL2 = 'O'

我会这样重写 using 语句,在更新部分使用 where 子句。

MERGE
INTO    Table1 t1
USING   Table2 t2
 ON (t1.Id = t2.Id) -- use Trim if needed, but this would mean Id is a VARCHAR ?

WHEN MATCHED THEN
 UPDATE
 SET     t1.VAL1=0
 WHERE t2.VAL2 = 'O'

或使用更新语句

UPDATE Table1 t1
SET t1.Val1 = 0
WHERE EXISTS (SELECT NULL
              FROM Table2 t2
              WHERE t2.Id = t1.Id
              AND t2.VAL2 = 'O')