一多关系

lnzxp 2004-09-27 09:36:25
在数据工作期窗口建立关联查询时,如果没有说明一多关系,这个查询的结果会有什么不同,为什么呢?
...全文
84 1 打赏 收藏 举报
写回复
1 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
YuyuanJian 2004-09-27
  • 打赏
  • 举报
回复
set relation 命令

在两个打开的表之间建立关系。
语法

SET RELATION TO
[eExpression1 INTO nWorkArea1 | cTableAlias1
[, eExpression2 INTO nWorkArea2 | cTableAlias2 ...]
[IN nWorkArea | cTableAlias]
[ADDITIVE]]

参数
eExpression1

指定用来在父表和子表之间建立关系的关系表达式。关系表达式通常是子表主控索引的索引表达式。
子表的索引可以是单项索引 (.IDX)、多项结构复合索引 (.CDX) 或独立复合索引。如果是复合索引,应指定适当的索引标识来排序子表。SET ORDER 可用来指定排序子表的索引标识。
例如,考虑“说明”部分描述的 customer 和 orders 两表。假定子表 orders 已经建立索引,并且使用如下命令用顾客编号进行排序:

SET ORDER TO TAG cust_id


要在 customer 和 orders 两表的顾客编号上建立关系,应选择包含父表 customer 的工作区或使用 IN 子句来指定父表的工作区或别名。然后,发出 set relation 命令,用如下关系表达式指定索引表达式:

SET RELATION TO cust_id INTO orders


除非关系表达式是数值型的,否则子表必须建立索引。如果发出包含非数值关系表达式的 set relation 命令时,子表没有使用索引进行排序, Visual FoxPro 显示错误信息。
如果 eExpression1 是数值型表达式,那么当记录指针在父表中移动时,将计算此表达式。然后,子表的记录指针移到记录编号为 eExpression1 的记录上。

INTO nWorkArea1 | cTableAlias1

指定子表的工作区编号 (nWorkArea1) 或子表的表别名 (cTableAlias1)。

eExpression2 INTO nWorkArea2 | cTableAlias2 ...

指定其他关系表达式 (eExpression2) 和子表,建立另一个父表和子表之间的关系。在一条 set relation 命令中可以创建单个父表与多个子表之间的关系,但是各个关系之间要用逗号隔开。
nWorkArea2 指定工作区编号,cTableAlias2 指定子表的别名。

IN nWorkArea

指定父表的工作区。

IN cTableAlias

指定父表的别名。
IN 子句允许创建关系时不必首先选择父表工作区。如果 set relation 命令中省略了 nWorkArea 和 cTableAlias,父表必须在当前选定的工作区中打开。

ADDITIVE

保留当前工作区中所有已存在的关系并创建指定的新关系。如果命令中不包括 ADDITIVE 子句,将断开当前工作区中的所有关系,然后再创建指定的关系。

说明

在建立关系之前,必须打开一个表(父表),而且还必须在另一个工作区内打开其他表(子表)。
相关的各表通常有一个相同的字段。例如,假定表 customer 包含顾客信息,有顾客姓名、地址和唯一的顾客编号等字段。表 orders 包含订货信息,也有顾客编号字段,同时还有日期和发货信息等字段。SET RELATION 通过相同的字段,即顾客编号字段来联系两个表。要建立这种关系,子表必须在公共字段上建立索引。建立关系后,不论何时在父表 customer 中移动记录指针到指定顾客编号的记录上时,子表 orders 中的记录指针也将同时移到相同顾客编号的记录上。如果子表中找不到相匹配的记录,子表中的记录指针将停在表尾。

不带任何参数的 SET RELATION TO 命令将移去当前选定工作区中的所有关系。可用 SET RELATION OFF 移去指定的父子关系。
发帖
VFP

2573

社区成员

VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
帖子事件
创建了帖子
2004-09-27 09:36
社区公告
暂无公告