SQL Merge - 如果在表2中找到值,则更新表1

时间:2016-01-04 13:32:56

标签: sql oracle-sqldeveloper

我需要表格:

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';

2 个答案:

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

答案 1 :(得分:0)

我会用这种方式重写using语句,在update部分中使用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')