SET SKIP 命 令
创建表与表之间的一对多关系
语 法
SET SKIP TO [ TableAlias1 [, TableAlias2 ] ...]
参 数 描 述
*TO TableAlias1 [, TableAlias 2 **] ... ***






指
定 多 个 子 表 的 别 名 这 些 子 表 用 来 与 父 表 创 建 一 对 多 关
系 表 别 名 之 间 用逗 号 分 隔 在 支 持 范 围 的 命 令 DISPLAY LIST
等
中 对 于 子 表 中 每 一个 对 应 记 录 都 重 复 父 表 的 记 录


不
带 参 数 的 SET SKIP TO 命 令 从 当 前 选 定 工 作 区 的 已 打 开 父
表 中 删 除 该 一对 多 关 系 而 任 何 一 对 一 关 系 仍 然 有 效 一 对
一 关 系 可 以 用 SET RELATION TO 删 除
说 明







使用
SET RELATION 可以在不同工作区中打开的表之间建立关系
当记录指针在父表中移动时 子表中的记录指针也移动到第一个对应的记录上
SET RELATION 中的关系表达式决定子表中的记录指针移到何处
如果对于父表中每一个记录都建立了一对一的关系
记录指针将移到子表中第一个相匹配的记录上
如果在子表中找不到相匹配的记录 则记录指针移到表尾





很多情况下
父表中的一个记录通常在子表中有多个记录与之对应 SET SKIP
允许在父表的一个记录与子表的多个记录之间建立一对多关系 当浏览父表时
父表的记录指针将一直保持不动 直到记录指针移过子表中所有相关的记录为止


要建立一对多关系
首先使用 SET RELATION 在父表与子表之间建立关系 然后发出 SET SKIP
命令创建一对多关系
示 例





下面示例在三个表中查找第一个字段内容相同的记录
首先使用 SCAN 扫描第一个 表 这个表与第二个表有关系
而第二个表与第三个表有关系 然后第一个表为其他两表发出 SET SKIP 命令
请注意 SET SKIP 对第二个表没有影响 它只影响被扫描





替代
等等 的 表 在这个示例中 查到了 8 条记录
CLOSE DATABASES
CREATE TABLE Parent FREE (Name C(1), Val C(10)) && 父表有一个 a 和 b.
INSERT INTO Parent VALUES ('a', 'Parent.a1') INSERT INTO Parent VALUES ('b', 'Parent.b1')
SELECT 0 && 子表 1 有两个 a 和 b CREATE TABLE Child1 FREE (Name1 C(1), Val C(10)) INSERT INTO Child1 VALUES ('a', 'Child1.a1')
INSERT INTO Child1 VALUES ('b', 'Child1.b1') INSERT INTO Child1 VALUES ('b', 'Child1.b2') INSERT INTO Child1 VALUES ('a', 'Child1.a2')
INDEX ON Name1 TAG tagName && 标识名是无关紧要的
SELECT 0 && Child2 有 两 个 a 和 b
CREATE TABLE Child2 FREE (Name2 C(1), Val C(10)) INSERT INTO Child2 VALUES ('b', 'Child1.b1')
INSERT INTO Child2 VALUES ('b', 'Child1.b2') INSERT INTO Child2 VALUES ('a', 'Child1.a1') INSERT INTO Child2 VALUES ('a', 'Child1.a2')
INDEX ON Name2 TAG tagName && 标识名是无关紧要的
SELECT Child1
SET RELATION TO Name1 INTO Child2
SELECT Parent
SET RELATION TO Name INTO Child1
SET SKIP TO Child1, Child2 && 注意对两个子表都设置 SKIP.
&& 否则
只有 4 条记录列出 .
SCAN ALL && 有 8 种情况 : 4 个 a 和 4 个 b
? Parent.Val, Child1.Val, Child2.Val ENDSCAN
请 参 阅
RELATION ( ), SET RELATION, SKIP
