SET SKIP 命 令

SET SKIP 命 令 - 图1创建表与表之间的一对多关系

语 法

SET SKIP TO [ TableAlias1 [, TableAlias2 ] ...]

参 数 描 述

*TO TableAlias1 [, TableAlias 2 **] ... ***

SET SKIP 命 令 - 图2SET SKIP 命 令 - 图3SET SKIP 命 令 - 图4SET SKIP 命 令 - 图5SET SKIP 命 令 - 图6SET SKIP 命 令 - 图7SET SKIP 命 令 - 图8指 定 多 个 子 表 的 别 名 这 些 子 表 用 来 与 父 表 创 建 一 对 多 关 系 表 别 名 之 间 用逗 号 分 隔 在 支 持 范 围 的 命 令 DISPLAY LIST 等 SET SKIP 命 令 - 图9 中 对 于 子 表 中 每 一个 对 应 记 录 都 重 复 父 表 的 记 录

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

说 明

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

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

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

示 例

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

SET SKIP 命 令 - 图36SET SKIP 命 令 - 图37SET SKIP 命 令 - 图38SET SKIP 命 令 - 图39SET SKIP 命 令 - 图40SET SKIP 命 令 - 图41替代 等等 的 表 在这个示例中 查到了 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.

SET SKIP 命 令 - 图42&& 否则 只有 4 条记录列出 .

SCAN ALL && 有 8 种情况 : 4 个 a 和 4 个 b

? Parent.Val, Child1.Val, Child2.Val ENDSCAN

请 参 阅

RELATION ( ), SET RELATION, SKIP