您的位置: turnitin查重官网> 计算机 >> 计算机制造 >试议视图VisualFoxPro多表视图或查询中联接条件设置学术

试议视图VisualFoxPro多表视图或查询中联接条件设置学术

收藏本文 2024-02-21 点赞:25154 浏览:109677 作者:网友投稿原创标记本站原创

摘 要: Visual FoxPro中为建立多表视图或查询进行联接条件设置时,在向导和设计器的使用中需要特别注意一些问题,否则联接结果很可能是不正确的。为此,以不同的实例分析了在向导和设计器中设置多表联接条件过程中可能出现的错误,并分析归纳了最简洁有效的正确设置方法。
关键词: Visual FoxPro; 多表; 视图; 查询; 联接条件
1006-8228(2013)02-52-03
Settings of connection condition in Visual FoxPro multi-table graphs or query
Yang Chunbo
(Binzhou Medical University Health Management College, Yantai, Shandong 264003, China)
Abstract: Some special problems need to be paid attention when setting up connection conditions for multi-table graph and query in Visual FoxPro, otherwise the connection result is very possibly not correct. The errors that may arise during the procedure to set up in wizard and designer are analyzed by using three tables as example. The most concise and effective correct setting method is summarized.
Key words: Visual FoxPro; multi-table; graph; query; connection condition
0 引言
Visual Foxpro具有功能强大、可视性强、面向对象等特点。在利用Visual Foxpro进行多表查询时,如联接条件设置不当,则联接结果会产生错误。本文对Visual Foxpro多表查询条件的向导和设计器的设置进行了分析和研究,以找出产生问题的根由和解决问题的方法。

1 联接条件设置基础理论

在进行Visual Foxpro的多表查询前需要设置表间的联接条件,以三个表为例,三个表需要设置两个联接条件。检测设A表和B表通过关键字段F来建立联接,联接条件表达式有两种书写格式:A.F=B.F和B.F=A.F,这两种书写格式不仅在顺序上存在差别,在实质含义上也是不一样的,位于等于号左边的表是父表,位于等于号右边的表是子表。

2 实例操作

因为查询与视图都对应一条SELECT查询语句,其建立步骤及注意事项完全相同,所以以视图的建立为代表,以查询“学生成绩”为例,从学生信息表、课程信息表、成绩信息表查询包含学号、姓名、课程号、课程名、成绩字段的数据信息,其中学生信息表与成绩信息表通过“学号”字段建立联接,课程信息表与成绩信息表通过“课程号”字段建立联接[2,3]。

2.1 向导中多表联接的建立

在使用向导创建查询时,在“步骤2-为表建立关系”中,如果已经设置了第1个联接条件“xsda.学号=xscj.学号”,则第2个联接条件不能设置为“kc.课程号=xscj.课程号”,如图1所示;否则会出现“一个表不能同时为两个父表的子表”的错误提示。这第2个联接条件只有设为“xscj.课程号=kc.课程号”才能够添加,但是按照该设置得到的结果肯定是错误的,返回检查后会发现:向导竟然已经将刚才的两个联接条件调换了位置,导致结果错误。解决方法为:将已经调换位置的两个联接条件先行移去,再按照调换之前的情况重新添加一次,向导就不会再将正确的联接条件调换位置而导致出错。
在先设置第1个联接条件为“kc.课程号=xscj.课程号”时也会出现类似情况,第2个联接条件不能设置为“xsda.学号=xscj.学号”,否则会出现“一个表不能同时为两个父表的子表”的错误提示。第2个联接条件只有设为“xscj.学号=xsda.学号”才能够添加,但是同样出现以上问题,向导会自行将该正确设置的两个联接条件调换位置从而导致结果出错,解决方法相同。而对于“一个表不能同时为两个父表的子表”的错误提示,在设计器中可以设置一个表同时为两个父表的子表,并且结果是正确的。
1.tif> 图1 一个表不能同时为两个父表的子表
如果已经设置了第1个联接条件“xscj.学号=xsda.学号”,则第2个联接条件不能设置为“xscj.课程号=kc.课程号”,如图2所示,否则会出现“一个表不能同时为两个子表的父表”的错误提示。第2个联接条件只有设为“kc.课程号=xscj.课程号”才能够添加,但这是一种错误的设置,而错误的设置向导就保持原有的错误情况,不会进行位置的调换,实际上,如果这两个联接条件调换位置,结果就是正确的[4]。
2.tif> 图2

源于:论文摘要怎么写www.udooo.com

一个表不能同时为两个子表的父表

2.2 设计器中多表联接的建立

在设计器中,指定两个字段分别给另外两个表建立联接条件,成绩信息表为B表,其他两个表分别为A表和C表,如学生信息表为A表,课程信息表为C表(亦可指定课程信息表为A表,学生信息表为C表,但是B表只能为成绩信息表),则三表之间联接条件的设置可有如下8种设置方式:⑴ A=B B=C
⑵ A=B C=B
⑶ C=B A=B
⑷ C=B B=A
⑸ B=A B=C
⑹ B=A C=B
⑺ B=C A=B
⑻ B=C B=A
例如第⑴情况的联接条件设置如图3所示。
3.tif> 图3 A=B B=C联接条件设置方式
联接条件可直接使用鼠标按指定顺序拖放关联字段来设置建立。
经过验证,前4种设置方式可以得出正确的结果,而后4种情况得出的结果是错误的,其中⑸和⑹两种情况出现C表课程信息表数据重复出现的错误,如图4所示,⑺和⑻两种情况出现A表学生信息表数据重复出现的错误,如图5所示。
4.tif> 图4 C表课程信息表数据重复出现
5.1\Fit201302\图\ycb图tif> 图5 A表课程信息表数据重复出现
总结规律如下:
⑴ 凡是第1个联接条件中B表作为子表的设置方式即⑴、⑵、⑶、⑷种情况结果均是正确的。
⑵ 凡是第1个联接条件中B表作为父表的设置方式即⑸、⑹、⑺、⑻种情况结果均是错误的。
分析原因,上述8种设置方式对应的具体联接设置代码为:
⑴ xsda JOIN xscj JOIN kc ON Xscj.课程号=Kc.课程号ON Xsda.学号=xscj.学号
⑵ xsda JOIN xscj JOIN kc ON Kc.课程号=Xscj.课程号ON Xsda.学号=xscj.学号
⑶ kc JOIN xscj JOIN xsda ON Xsda.学号=Xscj.学号ON Kc.课程号=Xscj.课程号
⑷ kc JOIN xscj JOIN xsda ON Xscj.学号=Xsda.学号ON Kc.课程号=Xscj.课程号
⑸ xscj JOIN xsda JOIN kc ON Xscj.课程号=Kc.课程号ON Xscj.学号=Xsda.学号
⑹ xscj JOIN xsda JOIN kc ON Kc.课程号=Xscj.课程号ON Xscj.学号=Xsda.学号
⑺ xscj JOIN kc JOIN xsda ON Xsda.学号=Xscj.学号ON Xscj.课程号=Kc.课程号
⑻ xscj JOIN kc JOIN xsda ON Xscj.学号=Xsda.学号ON Xscj.课程号=Kc.课程号
可以看出⑸、⑹、⑺、⑻种情况出错的原因在于:B表成绩信息表应该同时与A表学生信息表和B表课程信息表建立联接条件,但是在这种情况下只与其中的一个表建立了联接条件,从而导致联接条件对应不正确,出现错误的结果。而造成这种情况的原因取决于第1个联接条件的设置,不受第2个联接条件的影响,因此具体设置操作规律可简化如下:第1个联接条件中B表只能作为子表出现[5,6]。

3 结束语

向导中如果设置的联接条件是正确的,向导就会调换两个

源于:论文网站大全www.udooo.com

联接条件的位置从而造成设置错误,而如果设置的联接条件是错误的,则向导不会调换位置,维持原有错误设置。这应该是视图和查询向导中的一个很严重的BUG。设计器中多表联接的设置主要牵涉到与其他两个表建立联接的B表是否在JOIN中与其他两个表都建立了联接,只有与其他两个表都建立了JOIN联接才能得出正确的结果。数据库中表之间联接条件尤其是多表之间的联接条件很容易出现错误,只有深入分析研究,才能真正掌握其实质,从而避免在实际应用中出现错误。
参考文献:
黄河,王贤志.SQL语言与关系数据库[M].电子工业出版社,2011.
雷国华,胡西厚.数据库技术与医学应用[M].中国石油大学出版社,2012.
[3] 雷国华,胡西厚.医学计算机技术与应用[M].人民卫生出版社,2009.
[4] 张高亮.Visual FoxPro程序设计[M].科学出版社,2012.
[5] 毕文才.Visual FoxPro编程方法与技巧[M].郑州大学出版社,2008.
[6] 魏茂林.数据库应用技术—Visual FoxPro 6.0(第4版)[M].电子工业出版社2012.

copyright 2003-2024 Copyright©2020 Powered by 网络信息技术有限公司 备案号: 粤2017400971号