多表关联的删除和更新操作

多表关联的删除和更新操作

多表删除

可以使用"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关联表的位置,可以替换成子查询;
在外层写与主表的关联条件即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值