| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1370 人关注过本帖
标题:select 二表关联查询(A ,B)它们的工作区如何确定?
只看楼主 加入收藏
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用taifu945在2015-5-20 08:56:14的发言:

我就搞不懂了,为什么生成的表文件主干名就那么喜欢用一个字母呢?多写一个字母会损失什么吗?
当然不会损失,我问的为什么表文件主干名一个字母不行?
2015-05-20 10:42
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
自DBASE以来 a...J 这10个字母就是1..10 这工作区的别名所有,不能用于DBF文件名(如建立数据表 create a 就会报错的,虽然copy to A不会出错),其它的k字母以后的可以用于表文件

[ 本帖最后由 kiff 于 2015-5-20 10:58 编辑 ]
2015-05-20 10:56
sdta
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:江苏省连云港市
等 级:版主
威 望:335
帖 子:9841
专家分:27213
注 册:2012-2-5
收藏
得分:0 
楼主平时学习太少了

坚守VFP最后的阵地
2015-05-20 11:59
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
我问的产生二种不同结果的根本原因在何处?
2015-05-20 14:01
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:20 
测试了一下,似乎发现这样的情况:
SELECT max(平均分) as 平均分 FROM ls into table b
执行完句时,在A区打开了ls表,在C区打开了B表,可能是SELECT 内部机制(也不知的情况,猜的),接着执行select a.* from ls as a,b where a.平均分=b.平均分,这时 select 在最小工作区(b)再次打开 LS表,这样的话,就是A、B都是ls这个表,也就是自己关联自己。
根据以上测试,作出如下调整,就会发现得出正确结果

方法1:
USE ls IN 2
SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,b where a.平均分=b.平均分
方法2:
SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,c where a.平均分=c.平均分

 附上测试表
ls.rar (506 Bytes)


[ 本帖最后由 kiff 于 2015-5-20 15:01 编辑 ]
2015-05-20 14:57
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
不管什么情况,都要按游戏规则去做就OK了
2015-05-20 15:13
千分之
Rank: 2
等 级:论坛游民
帖 子:28
专家分:17
注 册:2015-5-16
收藏
得分:0 
路过
2015-05-20 16:25
muyubo
Rank: 9Rank: 9Rank: 9
来 自:山东莱芜
等 级:蜘蛛侠
威 望:3
帖 子:471
专家分:1017
注 册:2011-3-6
收藏
得分:0 
回复 11楼 sylknb
文件的根名扩展名一定要避开一些词,像工作区号,函数名等。电脑要根据这些去判断,不然容易出错。

[ 本帖最后由 muyubo 于 2015-5-20 17:38 编辑 ]
2015-05-20 17:37
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1547
专家分:184
注 册:2006-6-3
收藏
得分:0 
以下是引用kiff在2015-5-20 14:57:50的发言:

测试了一下,似乎发现这样的情况:
SELECT max(平均分) as 平均分 FROM ls into table b
执行完句时,在A区打开了ls表,在C区打开了B表,可能是SELECT 内部机制(也不知的情况,猜的),接着执行select a.* from ls as a,b where a.平均分=b.平均分,这时 select 在最小工作区(b)再次打开 LS表,这样的话,就是A、B都是ls这个表,也就是自己关联自己。
根据以上测试,作出如下调整,就会发现得出正确结果

方法1:
USE ls IN 2
SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,b where a.平均分=b.平均分
方法2:
SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,c where a.平均分=c.平均分

 附上测试表
我试了一下,方法1是成功的,
方法2 select a.* from ls as a,c where a.平均分=c.平均分中的C哪里来?
如果改为select a.* from ls as a,b as c where a.平均分=c.平均分,运行结果又不成功

2015-05-21 09:04
kiff
Rank: 11Rank: 11Rank: 11Rank: 11
来 自:广州
等 级:贵宾
威 望:46
帖 子:756
专家分:2531
注 册:2013-1-30
收藏
得分:0 
回复 19楼 sylknb
方法2:
close data
SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,c where a.平均分=c.平均分

这时的C是第一句生成的B表的别名(可以用 SET 查看一下),可以在第二句引用
如里改为 select a.* from ls as a,B as c where a.平均分=c.平均分,这样和你原来的没差别,结果就不对了.

2015-05-21 09:13
快速回复:select 二表关联查询(A ,B)它们的工作区如何确定?
数据加载中...
 
   



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

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