P.switch(Fi,Ai:x;…)

阅读(1351) 标签: 编码, 键值, 指引记录,

描述:

将编码字段的键值切换为指引记录。

语法:

P.switch(Fi, Ai:x;…)

备注:

P中外键字段Fi的值切换为Ai的记录匹配条件为FiAix字段值相等,匹配不到的填为null返回切换后的序表。

比如Attendance表里的employeeID字段,里面可能存的是employeeID的码值,也可能存Employee表的对应记录,此时可以用switch()在两者之间切换。

外键有索引表则用索引,没有则建立索引。

参数:

P

序表/排列。

Fi

P的外键字段。

Ai

序表/排列。

x

Ai中与Fi匹配的字段,缺省为Ai的主键。x#时直接用序号定位,Ai有序号索引时,可省略#

选项:

@i

Fi值匹配不到时删除整条记录。

@d

@i相反,只保留找不到的记录,此时不把Fi填成null

@1

PFi值在Ai中找不到,则在Fi中生成一条Ai结构的记录,主键值设为Fi

返回值:

序表

示例:

 

A

 

1

=demo.query("select top 5 * from DEPARTMENT")

返回序表:

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表:

3

=A2.switch(DEPT,A1:DEPT)

A2表的外键DEPTA1表中的DEPT字段匹配,将键值切换为A1表的指引记录,匹配不到的填入null

  参数x省略:

 

A

 

1

=demo.query("select * from DEPARTMENT").keys(DEPT)

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

x参数省略,将A2表的外键DEPTA1表主键匹配,将键值切换为A1表的指引记录:

x用序号定位,Ai中有序号索引时:

 

A

 

1

=connect("demo").query("SELECT * FROM CITIES")

返回序表:

2

=connect("demo").query("SELECT * FROM STATECAPITAL")

返回序表:

 

3

=A2.index@n()

A2表建立序号索引。

4

=A1.switch(STATEID,A2)

A1中的CITIES表作为事实表,A3中的STATECAPITAL作为维表;

通过switch()函数执行表关联计算,将CITIES表中的STATEID键值切换为STATECAPITAL的指引记录,计算过程中会使用外键的索引表,此时表达式中可以省略序号键,等同于A1.switch(STATEID,A2:#)

返回结果如下:

  使用@i选项:

 

A

 

1

=demo.query("select * from DEPARTMENT").keys(DEPT)

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

使用@i选项,A2DEPT匹配不到时删除整条记录:

  使用@d选项:

 

A

 

1

=demo.query("select * from DEPARTMENT").keys(DEPT)

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

使用@d选项,只返回A2DEPT匹配不到记录:

  使用@1选项:

 

A

 

1

=demo.query("select * from DEPARTMENT").keys(DEPT)

返回序表,主键为DEPT

2

=demo.query("select top 10 EID,NAME,DEPT,GENDER from EMPLOYEE")

返回序表。

3

=A2.switch(DEPT,A1)

使用@1选项,匹配不到时则在DEPT中生成一条A1结构的记录,记录的主键值为DEPT

 

相关概念:

cs.switch()