| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2139 人关注过本帖
标题:请教两张表关联更新问题
只看楼主 加入收藏
cyl1437
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-3-11
收藏
得分:0 
图片附件: 游客没有浏览图片的权限,请 登录注册
还是不行啊
2013-03-13 20:20
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:3 
这件事用SELECT-SQL不是很简单的事嘛,4楼或10楼的代码都可以,以10楼的为佳,编啥程序呀。
2013-03-13 20:21
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用cyl1437在2013-3-13 20:20:48的发言:

 还是不行啊
你怎么还在纠结UPDATE语句呀,6.0不支持FROM子句的。不是在4楼和10楼叫你用SELECT语句了嘛。
2013-03-13 20:23
cyl1437
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2013-3-11
收藏
得分:0 
以下是引用taifu945在2013-3-13 20:23:07的发言:

你怎么还在纠结UPDATE语句呀,6.0不支持FROM子句的。不是在4楼和10楼叫你用SELECT语句了嘛。
谢谢!可以用拉 我稍微改拉下

[ 本帖最后由 cyl1437 于 2013-3-13 20:31 编辑 ]
2013-03-13 20:26
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
从数据维护角度,以下2 语句的数据维护后是完整一致的(即维护表1后的记录不变)
update 表1 set 成绩=b.成绩 from 表2 b where 表1.编码=b.编码
select a.编码,nvl(b.成绩,0) 成绩 from 表1 a left join 表2 b on a.编码=b.编码 into dbf 表3

但如果用以下语句
SELECT A.编码,B.成绩 FROM 表1 A,表2 B WHERE ALLTRIM(A.编码)==ALLTRIM(B.编码)
维护表1后的记录有可能漏丢了(原因可能表2没记录与表1对应)

所以我都是基于数据维护角度考虑的
2013-03-13 20:59
taifu945
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:80
帖 子:1545
专家分:3298
注 册:2012-7-6
收藏
得分:0 
以下是引用kiff在2013-3-13 20:59:25的发言:

从数据维护角度,以下2 语句的数据维护后是完整一致的(即维护表1后的记录不变)
update 表1 set 成绩=b.成绩 from 表2 b where 表1.编码=b.编码
select a.编码,nvl(b.成绩,0) 成绩 from 表1 a left join 表2 b on a.编码=b.编码 into dbf 表3

但如果用以下语句
SELECT A.编码,B.成绩 FROM 表1 A,表2 B WHERE ALLTRIM(A.编码)==ALLTRIM(B.编码)
维护表1后的记录有可能漏丢了(原因可能表2没记录与表1对应)

所以我都是基于数据维护角度考虑的

但是你忘记了一点,编码是字符型的,且字段宽度比实际内容要长。如果录入数据的时候在有效内容后多输入了空格,视觉上不易察觉,但VFP比对时就会认为不一样,导致数据更新出错。有时候,看上去的小问题可能会引起大bug。基于这方面,我认为S版的代码更优些,因为据楼主所述,两表数据有不匹配记录的可能性不大。
2013-03-13 22:31
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
以下是引用taifu945在2013-3-13 22:31:32的发言:


但是你忘记了一点,编码是字符型的,且字段宽度比实际内容要长。如果录入数据的时候在有效内容后多输入了空格,视觉上不易察觉,但VFP比对时就会认为不一样,导致数据更新出错。有时候,看上去的小问题可能会引起大bug。基于这方面,我认为S版的代码更优些,因为据楼主所述,两表数据有不匹配记录的可能性不大。
我又怎么不知这些呀,都说了,我是从数据维护角度说的(现在是维护数据,不是写应用程序,不是讨论优化问题),其实你是说的是完全相等问题。在这你也是只知其一,不知其二。VFP 的SQL 中字符串比较时,后空格的多少是没影响的。当然最好用 “==” 因为 vfp 的SQL 符串比较时,会是这样的:'AB '='A' 返回 真 值,'AB '=='A' 即返回 假 值。所以需要注意的就是这情况。在这里可能又有人会说“我设置 SET EXACT ON 呀”,那我告诉你,SET EXACT ON 不能作用 VFP SQL 的

[ 本帖最后由 kiff 于 2013-3-14 10:52 编辑 ]
2013-03-14 10:35
cxzbzgz
Rank: 8Rank: 8
来 自:云南楚雄
等 级:贵宾
威 望:24
帖 子:297
专家分:808
注 册:2012-6-15
收藏
得分:3 
程序代码:
SELECT 1
   USE 表1
    INDEX on 编码 TO bm
  SELECT 2
   USE 表2

 DO whil NOT EOF()
   mbm=编码
   mcj=成绩
    SELECT 1
   SEEK mbm
    IF NOT EOF()
     REPLACE 成绩 WITH mcj
     ENDIF
    SELECT 2
     SKIP
   ENDDO  

学习交流VFP,QQ:248561326。
2013-03-14 17:47
摇曳的风车
Rank: 1
等 级:新手上路
帖 子:58
专家分:3
注 册:2013-3-15
收藏
得分:3 
建立两表的主索引为编码再在数据环境中建立关系不是可以关联了么两表
2013-03-16 15:22
快速回复:请教两张表关联更新问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027800 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved