A表中有账号(ac_id) 和 积分(points)两个字段
B表中有账号(ac_id) 和 交易金额(tx_amt) 交易日期(tx_date)三个字段
其中积分是每交易一元钱积一分,A表中记录着每一个账号所有的积分,现在我想从A表中去掉昨天每个账号所积的分,问大家这个SQL语句怎么写啊,谢谢大家了
B表中有账号(ac_id) 和 交易金额(tx_amt) 交易日期(tx_date)三个字段
其中积分是每交易一元钱积一分,A表中记录着每一个账号所有的积分,现在我想从A表中去掉昨天每个账号所积的分,问大家这个SQL语句怎么写啊,谢谢大家了
解决方案 »
- 请问这个SQL语句怎么写,谢谢!
- 用PLSQL连接服务器,是不是要先在本地先开启oracle的服务?
- Oracle中更新几十个表中的同一个字段 怎么操作?
- 多次查询,嵌套查询,java,oracle
- 请大家讨论ORACLE过程编写中的一个规范问题
- oracle developer 的FORM WHEN-BUTTON-PRESSED TRIGGER 中自动执行的创建VIEW的PL/SQL语句如何写?
- 晕,重复执行一条SQL语句一次和两次的时间差别怎么那么大???
- 哪里有oracle8.1.7for windows下载?
- 安装完ORACLE8.17后,应如何配置,使创建数据库成功?
- I want to be ORACLE DBA.What can I do?
- oracle统计问题
- 两表关联时的子集判断问题
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));哪个效率高啊?