标题:select 二表关联查询(A ,B)它们的工作区如何确定?
取消只看楼主
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
结帖率:79.3%
已结贴  问题点数:20 回复次数:8 
select 二表关联查询(A ,B)它们的工作区如何确定?
select 二表关联查询(A ,B)它们的工作区如何确定?
搜索更多相关主题的帖子: 工作区 如何 
2015-05-18 11:23
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
我问的问题:
在窗口命令中输入二个查询命令并运行,产生如此以下2个的结果,为什么?请指教!
1)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
clear all
select a.* from ls as a,b where a.平均分=b.平均分

有的班主说是:工作区可以用a、b、c...来引用,如 b.平均分,楼主(into table b)这样生成了的B会有问题,当你在B工作区有其它打开表时,以上使用就会是此B不是彼B了,而中间加了clear all,其实就是关闭了之前的工作(如B区),这样再select a.* from ls as a,b where a.平均分=b.平均分,其中的B才是你真正要的B。
所以请教 :二表关联时是否与工作区有关?
http://bbs.bccn.net/thread-445315-1-1.html
2015-05-19 16:31
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
我问的二种写法为什么结果不同,正确答案是第2张图,只有二个人的一张
2015-05-20 08:28
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
以下是引用taifu945在2015-5-20 08:56:14的发言:

我就搞不懂了,为什么生成的表文件主干名就那么喜欢用一个字母呢?多写一个字母会损失什么吗?
当然不会损失,我问的为什么表文件主干名一个字母不行?
2015-05-20 10:42
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
我问的产生二种不同结果的根本原因在何处?
2015-05-20 14:01
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册: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
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
以下是引用kiff在2015-5-21 09:13:22的发言:

方法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.平均分,这样和你原来的没差别,结果就不对了.
这时的C是第一句生成的B表的别名(可以用 SET 查看一下),可以在第二句引用
但在运行select a.* from ls as a,c where a.平均分=c.平均分时出来对话框 叫你去寻找要打开的文件



2015-05-21 10:21
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
我引用错了,引用了15楼的SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,c where a.平均分=c.平均分
出现了


引用19楼的

close data
SELECT max(平均分) as 平均分 FROM ls into table b
select a.* from ls as a,c where a.平均分=c.平均分

就对了。
2015-05-21 10:29
sylknb
Rank: 4
等 级:贵宾
威 望:14
帖 子:1519
专家分:174
注 册:2006-6-3
得分:0 
这时的C是第一句生成的B表的别名(可以用 SET 查看一下),可以在第二句引用
哪一条SET 什么命令?
是不是出现了如下对话框


[ 本帖最后由 sylknb 于 2015-5-21 10:39 编辑 ]
2015-05-21 10:32



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




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

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