标题:联系吹水佬老师
只看楼主
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
结帖率:100%
已结贴  问题点数:100 回复次数:31 
联系吹水佬老师
吹水佬老师你好!
感谢你对我多次帮助!
发过去一个SQL语句,3个表。运行语句时错误提示:SQL语句太长。
这个语句的意思是:
表8中z59字段到z69字段最后一行的值(共11个),分别与表9中z59字段的每一行(1000行)比较,保留不等于的,并放在表10z59字段中;
表8中z59字段到z69字段最后一行的值(共11个),分别与表9中z60字段的每一行(1000行)比较,保留不等于的,并放在表10z60字段中;
表8中z59字段到z69字段最后一行的值(共11个),分别与表9中z61字段的每一行(1000行)比较,保留不等于的,并放在表10z61字段中;
......
表8中z59字段到z69字段最后一行的值(共11个),分别与表9中z69字段的每一行(1000行)比较,保留不等于的,并放在表10z69字段中;

我把1个语句拆成2个语句,语句是不长了,但有一个致命的缺点:每次数据更新后,不等号后的数据都得手工录入。

恳请老师在百忙中帮助我写个程序,解决上述问题(语句太长,手工录入)。
再次感谢你的帮助!



表8.zip (331.46 KB)
表9.zip (40.94 KB)
表10.zip (272 Bytes)
cx1.zip (540 Bytes)
搜索更多相关主题的帖子: 字段 保留 一行 语句 老师 
2020-04-13 10:55
liuxingang28
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:山东济南
等 级:贵宾
威 望:47
帖 子:649
专家分:2156
注 册:2014-2-7
得分:20 
SELECT h1,h2,h3,z59,z60,z61,z62,z63,z64,z65,z66,z67,z68,z69
 from 3d999次数 WHERE !INLIST(z59,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z60,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z61,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z62,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z63,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z64,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z65,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z66,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z67,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z68,95,69,114,50,93,71,88,76,82) and ;
 AND !INLIST(z69,95,69,114,50,93,71,88,76,82) INTO TABLE  3d999次数2

泉城飞狐
2020-04-13 11:33
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 2楼 liuxingang28
我已看到您的程序。现在给老伴做午饭,下午试一下。谢谢。
2020-04-13 11:48
厨师王德榜
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:183
帖 子:942
专家分:4724
注 册:2013-2-16
得分:20 
拼凑SQL字串始终会面临字串过长,被系统拒绝的风险,还是要换一个思路,用循环方式可以解决.
另外,死代码终究不太方便,每一期都要改一改,易出错,很麻烦,还是用活代码好一些:
中午没事,写了一段,参考代码如下
程序代码:
SET SAFETY OFF 
DIMENSION arr1[11] as Integer
SELECT  表8
GO RECCOUNT('表8')
cfn='Z'
ic0 = 59
cfn1=''

FOR ii=1 TO 11
    cfn1=cfn + LTRIM(STR(ic0+ii-1))
    arr1[ii]=&cfn1 
ENDFOR 
SELECT 表9.*,0 as flag,SPACE(40) as bz FROM 表9 INTO CURSOR tmptab READWRITE 
SELECT tmptab
GO TOP 
DO WHILE NOT EOF()
cfn='Z'
ic0 = 59
cfn1=''
    FOR icol=1 TO 11
        IF flag<>0 THEN 
            EXIT 
        ENDIF 
        cfn1=cfn + LTRIM(STR(ic0+icol-1))
        FOR ii=1 TO 11
            IF &cfn1 = arr1[ii] THEN 
                REPLACE flag WITH flag+1 ,bz WITH cfn1 + "=" + LTRIM(STR(arr1[ii])) 
                EXIT 
            ENDIF 
        
        ENDFOR         
    
    ENDFOR 
    SKIP 
ENDDO 
SELECT tmptab 
DELETE FOR flag<>0  
SELECT 表10 
ZAP 
APPEND FROM DBF('tmptab') FOR NOT DELETED()
USE IN tmptab 
2020-04-13 12:19
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:323
帖 子:9621
专家分:26174
注 册:2012-2-5
得分:20 
是不是下面的结果


[此贴子已经被作者于2020-4-13 18:23编辑过]


坚守VFP最后的阵地
2020-04-13 12:26
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 5楼 sdta
sdta老师,你好!
结果不是这样的。程序运行后,结果应少于1000行,大约只有不到100行。
2020-04-13 12:49
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 2楼 liuxingang28
你好!非常感谢你的帮助!
你的程序没有解决数据变更后,手工录入的问题。
2020-04-13 13:00
mywisdom88
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:190
帖 子:3125
专家分:8340
注 册:2015-3-25
得分:0 
95,69,114,50,93,71,88,76,82
这些,哪里来的
2020-04-13 13:31
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 8楼 mywisdom88
是表8中字段z59到z69的最后一行
2020-04-13 14:08
yd1954
Rank: 2
来 自:辽宁沈阳
等 级:论坛游民
帖 子:143
专家分:21
注 册:2016-7-1
得分:0 
回复 5楼 sdta
sdta老师,你好!
我用了2个小时,手工统计一下,程序运行后大约剩400到500行。
2020-04-13 16:18



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-501013-1-1.html




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

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