免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2827 | 回复: 6
打印 上一主题 下一主题

多表间的数据更新操作 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-12-16 14:52 |只看该作者 |倒序浏览
假设有两张表a,b
a(ID,Name,Value...)
1,n1,v1...
2,n2,v2...

b(ID,Name,Value...)
11,n1,x...
12,n1,y...
13,n2,z...

要根据表a.Name=b.Name把表b.Value更新成表a.Value
也就是更新后的期望结果
b(ID,Name,Value...)
11,n1,v1...
12,n1,v1...
13,n2,v2...

通常大家是怎么做的?根据一张表的数据更新另一张表,大家通常怎么做,一条条数据查出来再一条条update?

尝试了多表的更新语句不知道标准SQL支持不支持的?
我在MYSQL5.0里试了一下
update a,b set b.Vlaue=a.Value where a.Name=b.Name
居然不报错也没有任何反应,query result empty

论坛徽章:
0
2 [报告]
发表于 2005-12-16 15:03 |只看该作者
不好意思,我刚才数据库有点问题,
update a,b set b.Vlaue=a.Value where a.Name=b.Name
这个语句在mysql5.0下能正常运行。

还是想问问大家一般是怎么做的,还有这种是标准SQL语句吗,别的数据库一般支持吗?
有时感觉MYSQL太强了,像多表的delete操作都支持,我以前用oracel都不支持

论坛徽章:
0
3 [报告]
发表于 2005-12-16 15:03 |只看该作者
是可以的

论坛徽章:
0
4 [报告]
发表于 2005-12-16 15:43 |只看该作者

如何同步一个表和另一张结构不同的备份表(多了几个字段的)

现在碰到了一个更麻烦的问题,干脆就继续发在这个贴子里。数据结构是虚拟的合理性大家不用考虑。
假设有一个班级表 class(claseID,studentID,studentName)
claseID,studentID,studentName
1, 01, 张三
1, 02, 李四
2, 03, 王五

另一个备份表classBak(claseID,studentID,studentName,description,year....)
claseID,studentID,studentName,description,year
1, 01, 张三,一年2班,2001
1, 02, 李四,一年2班,2001
2, 03, 王五,一年3班,2001
这classbak备份表里(studentID,studentName)的数据和需要和calss同步
我的第一个贴子只解决了update的问题,当class表里有删除或者增加,classbak里也需要相应的增加和删除(但不是实时的),通过用户的触发一次性同步,应该如何处理。

论坛徽章:
0
5 [报告]
发表于 2005-12-16 16:47 |只看该作者
1.先找出 class 中有而 classBak 中没有的记录
SELECT a.classID, a.studentID, a.studentName FROM class AS a LEFT JOIN classBak AS b USING (classID, studentID, studentName) WHERE b.classID IS NULL;
2.把上述记录添加到 classBak 表
INSERT INTO classBak (classID, studentID, studentName) (SELECT a.classID, a.studentID, a.studentName FROM class AS a LEFT JOIN classBak AS b USING (classID, studentID, studentName) WHERE b.classID IS NULL);

class 表删除操作就是相当于上面的反向操作,classBak 中有而 class 中没有,自己写吧
最后,再用你原来的那句 sql 来同步两个表。

不过我倒要问你为什么要这么做,就不能在程序中同步做这些事情?而非要事后来维护数据的一致性?
比如,对 class 表添加删除记录时,同时对 classBak 表也进行操作,加上事务甚至外键,不是简单很多么?

论坛徽章:
0
6 [报告]
发表于 2005-12-19 09:12 |只看该作者
谢谢楼上的,因为实际中两个表各有用处,一张表处于不稳定更新状态,一张表在一个阶段稳定一些,事实上取数据从备份表中取。

论坛徽章:
0
7 [报告]
发表于 2005-12-24 23:25 |只看该作者
我认为仍在事务处理里应该不错呀。为何搞的这么麻烦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP