描述:
虚表与序表/内存虚表外键式连接。
T.join(C:.,T’:K,x:F,…; …;…)
备注:
虚表定义计算,用T的字段C,…匹配序表/内存虚表T’的键K,T’计算表达式x后作为字段F的值拼接到T上,返回新虚表。
K可为#或者省略,K省略时默认为T’的键;K值为#时表示用T’表记录的序号,即外键序号化处理,简单概括就是维表的主键是从1开始的自然数,也就是表记录所在行号,这种情况下就可以用键值直接按行号定位维表记录,从而加快与维表关联的速度,进一步提升性能。
如果F在T中已存在则改写现有字段。时间键值被省略时用now()。
选项:
|
@i |
匹配不上的外键删除整条记录,缺省将填成null。 |
|
@o(Fi; C:.,T:K,x:F,…; …;…) |
原记录作为字段Fi生成新记录。 |
|
@d |
删除匹配上外键的整条记录,只做针对T的过滤操作,此时省略参数x:F。 |
|
@m |
T对C有序,T’对K有序,此时可用归并方式计算。 |
参数:
|
T |
虚表。 |
|
C |
虚表T的外键,多个时以冒号隔开。 |
|
T’ |
序表/内存虚表。 |
|
K |
T’的键。 |
|
x |
T’的字段表达式。 |
|
F |
表达式x的字段名。 |
返回值:
虚表
示例:
|
|
A |
B |
|
|
1 |
|
组表cities.ctx数据内容:
|
|
|
2 |
=pseudo(A1) |
|
由组表产生虚表。 |
|
3 |
=connect("demo").query("SELECT * FROM STATECAPITAL where STATEID<30").keys(STATEID) |
|
STATECAPITAL表数据内容:
|
|
4 |
=A2.join(STATEID,A3,CAPITAL) |
=A4.cursor().fetch() |
执行A4格中的表达式,虚表A2定义计算,将虚表与A3中STATECAPITAL表外键式连接,参数K缺省为的STATECAPITAL键,即STATEID,并将STATECAPITAL表中的字段CAPITAL拼接到中成为新虚表。 执行B4格中的表达式,读取A4虚表中的数据,此时A2虚表执行A4中定义的计算操作,返回内容如下内容如下:
|
|
5 |
=A2.join(STATEID,A3:#,CAPITAL) |
=A5.import() |
执行A5格中的表达式,虚表A2定义计算,可以看到STATEID字段是从1开始的自然数,与STATECAPITAL表的记录号是一致的,所以可以将参数K设为#,表示用STATECAPITAL表的序号,可提高计算效率。执行B5格中的表达式,返回结果与B4相同。 |
|
6 |
=A2.join@i(STATEID,A3,CAPITAL) |
=A6.import() |
使用@i选项,匹配不上的外键删除整条记录,缺省将填成null,执行B6格返回结果如下:
|
|
7 |
=A2.join@i(STATEID,A3) |
=A7.import() |
使用@i选项,当参数x:F省略时,只做针对虚表的过滤操作,执行B7格返回结果如下:
|
|
8 |
=A2.join@d(STATEID,A3) |
=A8.import() |
使用@d选项,当参数x:F省略时,删除匹配上外键的整条记录,只做针对虚表的过滤操作,执行B8格返回结果如下:
|
|
9 |
=A2.join(STATEID,A3,abc) |
=A9.import() |
x参数值在A2中找不到则填为nul,执行B9格返回结果如下:
|
|
10 |
=A2.join@o(cities;STATEID,A3,CAPITAL) |
=A10.import() |
使用@o选项,原记录整个作为字段cities生成新记录,此时相当于参数x为~ ,执行B10格返回结果如下:
|
|
11 |
=A2.join(STATEID,A3,CAPITAL:NAME) |
=A11.import() |
如果NAME在虚表中已存在则改写现有字段,执行B11格返回结果如下:
|
|
12 |
=pseudo([{file:"stal.btx",key:"keys(STATEID)"}]) |
|
由集文件定义内存虚表,STATEID为主键,数据内容如下:
|
|
13 |
=A2.join(STATEID,A12,CAPITAL) |
=A13.import() |
返回内容同B4。 |