多表删除
可以使用"EXISTS"和"NOT EXISTS" 两个关键字来实现。
先将子查询需要删除的数据筛选出来,在放到exists逻辑判断的后面。
(这里exists的逻辑是,只要子查询结果存在数据,就返回true,否则就没有匹配上的数据,返回false,不会删除)
// An highlighted block
DELETE FROM TEMP_A
WHERE EXISTS (
SELECT 1
FROM TEMP_A T1
LEFT JOIN T2
ON T1.ID = T2.ID
AND T1.AS_DATE = T2.AS_DATE
WHERE T1.FLAG='N'
)
多表更新
既可以使用MERGE INTO 也可以使用 UPDATE 方法来实现;
多数情况下第一种方式使用更普遍,效率也更高效。但是最近遇到了一种情况会报错
(1)需要更新的字段,在关联条件当中出现,就会报错;当然把这个条件删除就可以照常运行
// An highlighted block
#示例如下,会报【无法更新ON子句中引用的列】
MERGE INTO TEMP_A T1
USING TEMP_B T2
ON (T1.ID = T2.ID AND T1.AS_DATE = T2.AS_DATE AND T1.AMOUNT <> T2.AMOUNT)
WHEN MATCHED THEN
UPDATE
SET T1.AMOUNT = T2.AMOUNT
(2)这种情况下反而用update可以实现
// An highlighted block
#示例如下
UPDATE TEMP_A T1
SET T1.AMOUNT = T2.AMOUNT
FROM TEMP_B T2
WHERE T1.ID = T2.ID
AND T1.AS_DATE = T2.AS_DATE
AND T1.AMOUNT <> T2.AMOUNT
既然是多表查询,对应的TEMP_B关联表的位置,可以替换成子查询;
在外层写与主表的关联条件即可。