如何用sql语句修改表中字段值,值要取自另一张表

具体是这样的:表1中有如下四个字段
编号,姓名,卡号,余额
1 张三 123
2 李四 124
....
100 若干 233

表2中有如下字段:
卡号,余额
现在的问题我想把表1中的余额这个字段的内容更新为表2中的余额,也就是说,表1中的卡号为123的余额更新为表2中卡号为123的余额。以卡号为索引。但表2中的记录可能不只是表1一一对应的,也就适说表2中有的记录表1中时没有的,而表1中有的记录可能表2中也是没有的,我表述的不太清楚,不知道各位能不能听明白。
当然我也知道两个表有共同的索引字段,在编程的时候能够根据这个字段到另外一个表里取值,这个先不考虑,我就是单纯的想知道上面我描述的这个结果怎么用语句来实现,是用update语句吗?应该加什么条件呢?谢谢各位,我的百度财富分不多,请谅解。
最新回答
花舞花落泪

2024-04-29 02:47:29

那你就是要把凡是表1和表2相同的改了吧?
如果卡号无重复
这么写
update 表1 t1 set t1.余额=(select t2.余额 from 表2 t2 where t2.卡号=t1.卡号)

财富是浮云,帮到你才是真的
追问
这个语句能把表1中若干条记录的余额更改成以卡号对应的表2中的余额吗?会不会出现这种问题,就是表2中用select选出来的和表1中对应的那些记录,然后按顺序的填充到表一的余额中,而不是按卡号对应的填充余额,会这样吗?
追答
只要表2里的卡号唯一就没问题
怕的是表2里有重复卡号
我这个,会把表1即使有重复的卡号也都会更改为表2里唯一卡号对应的余额,顺便问一句,啥数据库

---补充---
不放心的话,你可以先备份一下表1,别真有问题到时候不好办
追问
一个用餐收费系统的数据库。我按你的方法回头试一下。谢谢了。
追答
恩,有问题直接喊
你可真迷人

2024-04-29 03:08:13

--Sql By MySql 5.1
--update data in tab2

update tab2,tab1 set tab2.ye=tab1.ye where tab2.kh=tab1.kh
--insert data in tab2
insert into tab2 ( kh,ye) select kh,ye from tab1 where tab2.kh not in ( select kh from tab1)