mysql 联合查询 更新_mysql多表联合查询与更新

CHONGZHI充值表 uid charid

CHARBASE 玩家基本数据,charid 和accid一一对应。

FLATFORMID2ACCID 玩家uid 和accid 一一对应。

假如chongzhi

表里面的uid都错了如何根据charid在charbase中找到对应的accid,然后利用accid在表FLATFORMID2ACCID中找到对应的uid,并将此uid更新到chongzhi表的uid字段呢?

这个过程涉及到了三部分和三张表且都有条件判断。用普通sql语句很难处理,神马存储过程我更是一点不懂,mysql中给我们提供了一个临时表机制。所以可以将每一步操作

保存到一个临时表中,然后对临时表操作,可以非常方便的实现对数据库数据的更正。

①根据CHONGZHI表中的charid记录,分别从两个db的charbase表中查找相应的accid然后插入到临时表TTT和TTT2中。

CREATE TEMPORARY TABLE TTT SELECT C.ACCID, C.CHARID FROM

charbasedb1.CHARBASE C JOIN CHONGZHI ON CHONGZHI.CHARID=C.CHARID;

CREATE TEMPORARY TABLE TTT2 SELECT C.ACCID, C.CHARID FROM

charbasedb2.CHARBASE C JOIN CHONGZHI ON CHONGZHI.CHARID=C.CHARID;

②将TTT2中数据合并到TTT中

INSERT INTO TTT SELECT * FROM TTT2;

③给TTT表增加一个uid字段

ALTER TABLE TTT ADD `UID` varchar(80) NOT NULL default '';

④根据FLATFORMID2ACCID表字段值设置TTT表uid值

UPDATE TTT AS TTT, FLATFORMID2ACCID AS

FLATFORMID2ACCID SET

TTT.UID=FLATFORMID2ACCID.PLATFORMID WHERE

TTT.ACCID=FLATFORMID2ACCID.ACCID;

⑤根据TTT表中uid更新CHONGZHI表中错误的uid字段值。

UPDATE CHONGZHI AS CHONGZHI, TTT AS TTT SET CHONGZHI.UID=TTT.UID

WHERE CHONGZHI.CHARID=TTT.CHARID;

关闭连接临时表自动消失

最后引用一段mysql官方手册话“

在创建表格时,您可以使用TEMPORARY关键词。只有在当前连接情况下,TEMPORARY表才是可见的。当连接关闭时,TEMPORARY表被自动取消。这意味着两个不同的连接可以使用相同的临时表名称,同时两个临时表不会互相冲突,也不与原有的同名的非临时表冲突。(原有的表被隐藏,直到临时表被取消时为止。)您必须拥有CREATE

TEMPORARY TABLES权限,才能创建临时表。“

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值