描述:
将编码字段的键值切换为指引记录。
语法:
P.switch(Fi, Ai:x;…)
备注:
将P中外键字段Fi的值切换为Ai的记录,匹配条件为Fi与Ai的x字段值相等,匹配不到的填为null,返回切换后的序表。
比如Attendance表里的employeeID字段,里面可能存的是employeeID的码值,也可能存Employee表的对应记录,此时可以用switch()在两者之间切换。
外键有索引表则用索引,没有则建立索引。
|
P |
序表/排列。 |
|
Fi |
P的外键字段。 |
|
Ai |
序表/排列。 |
|
x |
Ai中与Fi匹配的字段,缺省为Ai的主键。x为#时直接用序号定位,Ai有序号索引时,可省略#。 |
选项:
|
@i |
Fi值匹配不到时删除整条记录。 |
|
@d |
与@i相反,只保留找不到的记录,此时不把Fi填成null。 |
|
@1 |
P中Fi值在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表的外键DEPT与A1表中的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表的外键DEPT与A1表主键匹配,将键值切换为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选项,A2中DEPT匹配不到时删除整条记录:
|
使用@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选项,只返回A2中DEPT匹配不到记录:
|
使用@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:
|