ORACLE 如何同时update 两张表?

Table : sysdata & bankdata
两张表的结构都是:

卡号 金额 状态
xxxx 0.00 0
yyyy 0.00 0
zzzz 0.00 0

问题来了,现在要把两张表中,卡号和金额相同的条目的状态改为1。两张表的状态都要改!
重点在于,相同卡号和金额的记录数sysdata中可能有两三条,但bankdata中可能有七八条。而我的需求就是不管哪张表的记录数多,我要求两张表里相同条件的记录要一对一。也就是说,sysdata 有三条,bankdata有十条,我的结果只要更新三条,同样bankdata有一条sysdata有一百条,我也只要更新一条。注意,表中卡号并非只有一个,所以rownum行不通!
请数据库的高手们指教一下吧!万分感谢啦!
其实如何做到我那个逻辑我还是弄不太懂.
怎样做到我说的那样,只选择一对一的出来?
我搞了N久都不行.有人说rownum可以,我试了,只能选出一条.这不是我要的结果,我要的是一条条的对应,不是只对应第一条.
我用的是Oracle 9i
最新回答
听风入韵

2024-09-17 15:00:25

明确告诉你“UPDATE”命令本身不能同时修改多表;
教科书上UPDATE命令格式如下:
“update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式”
当然可通过很多总方法达到UPDATE多张表的效果,而不是单纯依靠UPDATE命令本身,如:
1、将多个UPDATE用“;”号隔开来执行;
2、通过过程、包实现;
3、通过触发器来实现;
4、通过建立关联;
5、通过外部调用等;
靠张根硕呼吸

2024-09-17 01:47:40

可以实现,只是不太明白你的业务需求。
已理解:
1、sysdata、bankdata 两张数据表中 都有结构相同字段:卡号、金额、状态;
2、两张表中,卡号、金额都分别一样的要更改字段状态;
3、更改状态数量是根据bankdata、sysdata哪个记录少的那个记录数。
不理解:
1、更改一张表还是两张都要改;
2、如果sysdata 有三条,bankdata有十条,更新三条(哪个表的三条?)
3、如果两张都要改,bankdata有十条(要改哪三条?)
╰堕落的青春

2024-09-17 05:28:12

把两张表建立联系(relationships)
然后将关系中的“Update Rule”选项 设为 “Cascade” 就可以了,默认是“No Action”