| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2167 人关注过本帖
标题:如何能更快速的两表多字段匹配替换
只看楼主 加入收藏
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
结帖率:83.33%
收藏
已结贴  问题点数:20 回复次数:9 
如何能更快速的两表多字段匹配替换
本人是新手,表数据量较大,下面语句运行速度较慢,求助大神帮助优化,谢谢!
SELECT 1
USE 流水1 SHARED
SELECT 2  
USE 流水2 SHARED
GOTO TOP
DO WHILE EOF()=.f.
  SELECT 1
  LOCATE FOR date=b->date AND id=b->id
  IF !EOF()
    REPLACE stk WITH b->stk fect WITH b->fect
  ENDIF
  SELECT 2
  SKIP +1
ENDDO
搜索更多相关主题的帖子: 快速 多字段 匹配 替换 SELECT 
2017-08-13 21:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:10 
USE 流水1 ALIAS 流水1 IN 0 SHARED
USE 流水2 ALIAS 流水2 IN 0 SHARED
SELECT 流水1
INDEX on date+id TAG date_id    && date、id为字串型时
SELECT 流水2
SET RELATION TO date+id INTO "流水1"
REPLACE 流水1.stk WITH 流水2.stk, 流水1.fect WITH 流水2.fect ALL
SET RELATION TO
2017-08-13 22:48
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
如果date,id两字段均为数值型,请问需要怎样处理?
2017-08-13 22:51
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用yewxj在2017-8-13 22:51:03的发言:

如果date,id两字段均为数值型,请问需要怎样处理?

INDEX on str(date,长度1)+str(id,长度2) TAG date_id &&注意长度要足够。
同样:
SET RELATION TO str(date,长度1)+str(id,长度2) INTO "流水1"
2017-08-13 22:56
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
太神奇了,速度快了无数倍,谢谢大侠的无私帮助!!
2017-08-13 23:14
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
以下是引用吹水佬在2017-8-13 22:48:35的发言:

USE 流水1 ALIAS 流水1 IN 0 SHARED
USE 流水2 ALIAS 流水2 IN 0 SHARED
SELECT 流水1
INDEX on date+id TAG date_id    && date、id为字串型时
SELECT 流水2
SET RELATION TO date+id INTO "流水1"
REPLACE 流水1.stk WITH 流水2.stk, 流水1.fect WITH 流水2.fect ALL
SET RELATION TO


经测试,date,id两数值型字段不转换成字符型的也可以正常运行,结果一样,请问为什么date、id要为字串型?
2017-08-13 23:24
wangzhiyi
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:34
帖 子:366
专家分:684
注 册:2014-4-9
收藏
得分:10 
以下是引用yewxj在2017-8-13 23:24:38的发言:



经测试,date,id两数值型字段不转换成字符型的也可以正常运行,结果一样,请问为什么date、id要为字串型?

你要好好去了解SET RELA TO 关联是如何用父表的数据在子表中找记录就明白了。
2017-08-14 01:29
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:451
帖 子:10607
专家分:43186
注 册:2014-5-20
收藏
得分:0 
以下是引用yewxj在2017-8-13 23:24:38的发言:



经测试,date,id两数值型字段不转换成字符型的也可以正常运行,结果一样,请问为什么date、id要为字串型?

这样,结果不一定是一样。数值 1+2 == 2+1,但字符 '1'+'2' != '2'+'1'。
如:
这个是按f1+f2的结果
图片附件: 游客没有浏览图片的权限,请 登录注册

这个是按STR(f1,1)+STR(f2,1)的结果
图片附件: 游客没有浏览图片的权限,请 登录注册

CREATE CURSOR t1 (f1 I, f2 I, f3 I)
INSERT INTO t1 VALUES (1, 2, 0)
INSERT INTO t1 VALUES (2, 1, 0)
INSERT INTO t1 VALUES (2, 2, 0)
*INDEX on f1+f2 TAG f1f2
INDEX on STR(f1,1)+STR(f2,1) TAG f1f2
CREATE CURSOR t2 (f1 I, f2 I, f3 I)
INSERT INTO t2 VALUES (1, 2, 1)
INSERT INTO t2 VALUES (1, 2, 2)
INSERT INTO t2 VALUES (2, 1, 3)
SELECT t2
*SET RELATION TO f1+f2 INTO "t1"
SET RELATION TO STR(f1,1)+STR(f2,1) INTO "t1"
REPLACE t1.f3 WITH t2.f3 ALL
SELECT t1
BROWSE
2017-08-14 04:58
yewxj
Rank: 3Rank: 3
等 级:论坛游侠
威 望:5
帖 子:157
专家分:153
注 册:2015-6-18
收藏
得分:0 
受教了,非常感谢!

[此贴子已经被作者于2017-8-14 06:25编辑过]

2017-08-14 06:20
chychychy
Rank: 2
等 级:论坛游民
帖 子:285
专家分:98
注 册:2015-4-18
收藏
得分:0 
回复 8楼 吹水佬
图片附件: 游客没有浏览图片的权限,请 登录注册

为什么我测试按照F1+f2运行结果是这样的,三个都是0,你的第1个怎么是3呢?
2024-02-20 16:55
快速回复:如何能更快速的两表多字段匹配替换
数据加载中...
 
   



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

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