我需要表格:
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';
答案 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')