我正在研究SQL Server,Oracle,DB2数据库。
目前,我正在执行以下2更新语句来更新一个表。
更新1:
UPDATE TABLE1
SET COL1=TABLE2.ATTRIBUTE1,
COL2=TABLE2.ATTRIBUTE2,
COL3=TABLE2.ATTRIBUTE3
FROM TABLE1
INNER JOIN TABLE2
ON COL1=TABLE2.PID1
AND COL2=TABLE2.PID2
WHERE ROWNUM<10
更新2:
UPDATE TABLE1
SET COL1=’123-4567890-1’,
COL2=’0000000000’,
COL3=’CONSTANT FULL NAME’
WHERE NOT EXISTS (SELECT 1 FROM TABLE2 WHERE COL1=TABLE2.PID1)
更新1,如果值与Table2匹配,则有助于更新TABLE1 更新2,如果值与Table2
不匹配,则有助于更新TABLE1有没有其他方法可以将两个update语句转换为单个UPDATE语句?
注意:我们也可以使用MERGE,但如果数据匹配,MERGE将更新,如果数据不匹配,则会插入。
答案 0 :(得分:1)
要进行一次更新,您可以使用两个LEFT JOIN,每个表连接条件一个。然后,在SET部分中,使用CASE WHEN ... THEN ... END检查来自相关联的PK是否为空。
如下所示
UPDATE TABLE1
SET COL1=CASE
WHEN T1.PID1 IS NOT NULL THEN T1.ATTRIBUTE1
WHEN T2.PID1 IS NULL THEN ’123-4567890-1’
ELSE COL1
END,
etc.
FROM TABLE1
LEFT JOIN TABLE2 T1 ON COL1=T1.PID1 AND COL2=T1.PID2 AND ROWNUM < 10
LEFT JOIN TABLE2 T2 ON CEDULA=T2.PID1
WHERE T2.PID1 IS NULL OR T1.PID1 IS NOT NULL
然而,拥有一个UPDATE语句并不意味着它会更快 - 检查查询计划和实际性能。