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')
我要表 :
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')