该代码运行时间太长,不知道是什么原因?

xlcself2011 2017-05-24 02:28:16
表mzinj1记录数有3214629,cursorfsdrg2筛选出大概15000条左右的记录。不知道是代码的问题还是什么?运行很久(至少半小时)都还是出不来结果,请大侠们给指导下。谢谢。
SELECT mzinj1
GO BOTTOM
recnum=RECNO()
GO TOP
SELECT mzinj1
SELECT pno FROM (SELECT pno,COUNT(pno) as pnonum FROM mzinj1 WHERE pno in (SELECT pno FROM mzinj1 WHERE drgcode LIKE "P021%") GROUP BY pno ORDER BY 2 DESC ) as myquery WHERE pnonum<=2 INTO CURSOR fsdrg2
SELECT fsdrg2
GO BOTTOM
fsrecnum=RECNO()

FOR i=1 TO fsrecnum
SELECT fsdrg2
GO i
fspno=fsdrg2.pno
*!* SELECT mzinj1
*!* DELETE FOR pno=fspno 用这个也是运行很久都不结果。
FOR j=1 TO recnum
SELECT mzinj1
mzinjpno=mzinj1.pno
IF fspno=mzinjpno
DELETE
ENDIF
ENDFOR
ENDFOR
MESSAGEBOX("OK!")
...全文
927 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlcself2011 2017-05-29
  • 打赏
  • 举报
回复
引用 2 楼 dkfdtf 的回复:
看上去,两条语句就够了,合成为一条也可以
SELECT pno FROM mzinj1 WHERE drgcode LIKE "P021%" ;
    GROUP BY pno HAVING COUNT(pno) <= 2 INTO CURSOR fsdrg2
 
DELETE mzinj1 FROM fsdrg2 WHERE mzinj1.pno = fsdrg2.pno
是的。后来我同not in 就只要100多秒就可以了。谢谢猫大侠。
o0风箫吟0o 2017-05-27
  • 打赏
  • 举报
回复
强大1
都市夜猫 2017-05-25
  • 打赏
  • 举报
回复
看上去,两条语句就够了,合成为一条也可以
SELECT pno FROM mzinj1 WHERE drgcode LIKE "P021%" ;
    GROUP BY pno HAVING COUNT(pno) <= 2 INTO CURSOR fsdrg2
 
DELETE mzinj1 FROM fsdrg2 WHERE mzinj1.pno = fsdrg2.pno

2,722

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧