| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2713 人关注过本帖
标题:关于DELETE - SQL 命令的问题
取消只看楼主 加入收藏
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
结帖率:90.91%
收藏
已结贴  问题点数:20 回复次数:7 
关于DELETE - SQL 命令的问题
如同在UPDATE - SQL 命令中遇到的问题一样,在DELETE - SQL 命令中同样遇到。
SET TALK OFF
SET SAFETY OFF
SET CENTURY ON
SET EXACT ON
SET DATE YMD
SET SYSMENU OFF
CLEAR ALL
CLOSE DATABASES
CD D:\BDS
CREATE DBF L1 (A1 C(10), A2 C(10),A3 N(2)) &&建立表
FOR X=1 TO 8
Y=STR(X,1)
APPEND BLANK
REPLACE A1 WITH 'SJA'+Y,A2 WITH 'SJB'+Y,A3 WITH X
ENDFOR
COPY TO L2 FOR A3<6
INDEX ON A3 TAG A1
SELECT 0
USE L2
DELETE FOR A3=3
PACK
INDEX ON A3 TAG A1
SELECT L1
SET RELATION TO A3 INTO L2
DELETE FROM L1 WHERE L1.A3=L2.A3
*DELETE FOR L1.A3=L2.A3
BROWSE
RETURN

程序段是想在L1表中,删除L2表有的记录,关键字段是A3。但是上述程序只能删除第一条记录。采用 DELETE FOR L1.A3=L2.A3 是能达到目的的。为什么?

搜索更多相关主题的帖子: 问题 
2012-02-07 14:17
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
lygcw9603老师,我很抱歉。我过于简单的表述,产生疑问。我的题意是以A3字段为关键字段,在L1中删除和L2.A3数据相同的记录。以例题来说就是在L1表中,删除A3=1,2,4,5 这4个记录,因为在L2中都有。
2012-02-07 15:29
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
TonyDeng老师对SQL指令的介绍,使我进一步了解SQL指令认识。请老师们继续指教。
2012-02-07 15:37
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
谢谢TonyDeng老师,8楼9楼的程序语句达到预想的效果。问题的关键在于 WHERE SEEK(L1.A3, "L2") 字句。
但是我在某些程序段中使用WHERE ...=... .AND. ...=...,还是能够达到目的的。是不是还是稳定性问题呢?
2012-02-07 16:24
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
继续讨论UPDATE 。将程序段稍微变化一些。
SET TALK OFF
SET SAFETY OFF
SET CENTURY ON
SET EXACT ON
SET DATE YMD
CLEAR ALL
CLOSE DATABASES
CREATE DBF L1 (A1 C(10), A2 C(10),A3 N(4)) &&建立表
FOR X=1 TO 8
Y=STR(X,1)
APPEND BLANK
REPLACE A1 WITH 'SJA'+Y,A2 WITH 'SJB'+Y,A3 WITH X
ENDFOR
COPY TO L2 FOR A3<6
INDEX ON A1+A2 TAG A1
SELECT 0
USE L2
DELETE FOR A3=3
PACK
INDEX ON A1+A2 TAG A1
SELECT L1
SET RELATION TO A1+A2 INTO L2

UPDATE L1 SET L1.A3=L2.A3+10 WHERE L1.A1=L2.A1 .AND. L1.A2=L2.A2

BROWSE
RETURN

这段程序比较好的达到预想的目的,对L1 中符合要求的4个记录进行了替换。

我不知道为什么?

2012-02-08 11:19
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
谢谢qingfameng老师关注,你在13楼的答复对我很有帮助。
确实 如 REPL FOR .... 以及 DELE FOR .... 等最初的 fox命令,运行起来正确性稳定性,我从来没有怀疑过。但是为了寻找优化、高速的语句不得不试用如 UPDATE SQL等命令。
2012-02-08 11:29
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
谢谢qingfameng老师,按你在16楼的指导,去除L1的索引,原例题达到了预想的目的。对二表关联的认识因此也进了一步。不知你是否注意我在14楼程序变动,在那里L1还是有索引的,但是例题是达到了预想的目的的。
现在看来二表关联,主表有没有索引,似乎无关紧要,应该对速度没有影响。不知能否肯定。
TonyDeng老师在11楼、12楼对SQL命令機制的解说,使我加深了对SQL命令的认识,以后将慎重应用SQL命令。十分感谢TonyDeng老师无私赐教。我将再提一个SQL问题,以求赐教。
2012-02-09 07:59
panpende
Rank: 8Rank: 8
等 级:蝙蝠侠
威 望:4
帖 子:528
专家分:963
注 册:2009-4-27
收藏
得分:0 
万分感谢qingfameng老师的指教。我将在今后的编程工作中采纳你的意见。
2012-02-11 09:12
快速回复:关于DELETE - SQL 命令的问题
数据加载中...
 
   



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

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