A表中有账号(ac_id) 和 积分(points)两个字段
B表中有账号(ac_id) 和 交易金额(tx_amt) 交易日期(tx_date)三个字段
其中积分是每交易一元钱积一分,A表中记录着每一个账号所有的积分,现在我想从A表中去掉昨天每个账号所积的分,问大家这个SQL语句怎么写啊,谢谢大家了
B表中有账号(ac_id) 和 交易金额(tx_amt) 交易日期(tx_date)三个字段
其中积分是每交易一元钱积一分,A表中记录着每一个账号所有的积分,现在我想从A表中去掉昨天每个账号所积的分,问大家这个SQL语句怎么写啊,谢谢大家了
where exists(select 1 from B where a.ac_id=b.ac_id) using to_date(日期,'YYYY-MM-DD')
SET a.points = a.points - (SELECT SUM(nvl(tx_amt, 0))
FROM b
WHERE b.ac_id = a.ac_id
AND trunc(tx_date ,'dd')=trunc((SYSDATE - 1),'dd');
where exists (select 1 from tb2 where tb1.ac_id = tb2.ac_id and trunc(tx_date) = trunc(sysdate-1));
where exists(select 1 from B where a.ac_id=b.ac_id) using to_date(日期, 'YYYY-MM-DD ')这一句,但是A表的数据量特别大,而B的数据量相对要小一些,我不知道,您的这条语句会不会逐条的去对比A表中的数据,那样的话,效率就会低很多,我不知道该怎么写效率会高一些
update A set …… where exists (……)
这个语句的作用好吗?
只更新A表中满足exists条件中的记录,这样效率高些。
用nvl函数处理一下是可以的;
如果没用nvl函数处理,就会将A表中不满足exists条件的记录置为null了。
update tb1 set points = points - (select sum(tx_amt) from tb2 where tb1.ac_id = tb2.ac_id and trunc(tx_date) = trunc(sysdate-1) group by ac_id)
where exists (select 1 from tb2 where tb1.ac_id = tb2.ac_id and trunc(tx_date) = trunc(sysdate-1));改成
update tb1 set points = points - (select sum(tx_amt) from tb2 where tb1.ac_id = tb2.ac_id and trunc(tx_date) = trunc(sysdate-1) group by ac_id)
where tb1.ac_id in (select tb.ac_id from tb2 where trunc(tx_date) = trunc(sysdate-1));哪个效率高啊?