管道与集文件/实表外键式连接。
语法:
ch.joinx(C:…,f:K:…,x:F,…;…;…;n) |
用管道ch中的字段C,…匹配可分段集文件f的键K并找到相应记录。 |
ch.joinx(C:…,T:K:…,x:F,…;…;…;n) |
用管道ch中的字段C,…匹配实表T的键K并找到相应记录。 |
备注:
用管道ch中的字段C,…匹配可分段集文件f或者实表T的键K并找到相应记录,然后拼接上该记录的表达式x作为字段F,添加到ch中,匹配不上外键的记录,字段值缺省填写为null。 f/T对K有序。
该函数为结果集函数。
选项:
@i |
匹配不上外键则删除整条记录,缺省填成null。 没有x:F参数时,只做针对cs的过滤。 |
@d |
删除匹配上外键的整条记录,只做针对cs的过滤操作,此时省略参数x:F。 |
@q |
ch数据量不大或是序列时,有序匹配加快速度 。 |
@u |
不保持ch的原次序。 |
@m |
ch对C有序,f/T对K有序,可用归并方式计算。 |
参数:
ch |
管道。 |
C |
管道ch的外键。 |
f |
集文件。 |
T |
实表。 |
K |
f/T的键。 |
x |
f的字段表达式。 |
F |
表达式x的字段名。 |
n |
缓存区行数。 |
返回值:
管道
示例:
管道与集文件常规连接:
|
A |
|
1 |
=connect("demo").cursor("select CID,NAME,POPULATION,STATEID from CITIES") |
返回游标,数据内容如下: |
2 |
=channel(A1) |
创建管道,并将A1游标中的数据推送到管道。 |
3 |
=file("States.btx") |
返回分段集文件,文件中数据如下: |
4 |
=A2.joinx(STATEID,A3:STATEID,NAME:SName,POPULATION:SPopulation;1000) |
用A2管道中的字段STATEID匹配集文件的STATEID字段,将集文件的NAME、POPULATION列分别作为SName、SPopulation字段添加到A2上,返回管道。 |
5 |
=A1.fetch() |
A1游标执行取数动作,游标中的数据数据流过管道A2。 |
6 |
=A2.result().fetch() |
获取管道中的数据: |
管道与实表连接,使用@i选项,删除外键不匹配的记录:
|
A |
|
1 |
=connect("demo").cursor("select CID,NAME,POPULATION,STATEID from CITIES") |
返回游标,数据内容如下: |
2 |
=channel(A1) |
创建管道,并将A1游标中的数据推送到管道。 |
3 |
=file("StateFile.ctx").open() |
返回STATEID为键的实表,数据如下: |
4 |
=A2.joinx@i(STATEID,A3:STATEID,NAME:SName,POPULATION:SPopulation;1000) |
用A2管道中的字段STATEID匹配实表的STATEID字段,将实表的NAME、POPULATION列分别作为SName、SPopulation字段添加到A2上,返回管道。 使用@i选项,A2管道中外键STATEID匹配不上的记录删除。 |
5 |
=A1.fetch() |
A1游标执行取数动作,游标中的数据数据流过管道A2。 |
6 |
=A2.result().fetch() |
获取管道中的数据: |
管道与集文件连接,使用@d选项,做与@i相反的过滤动作:
|
A |
|
1 |
=connect("demo").cursor("select CID,NAME,POPULATION,STATEID from CITIES") |
返回游标,数据内容如下: |
2 |
=channel(A1) |
创建管道,并将A1游标中的数据推送到管道。 |
3 |
=file("States.btx") |
返回分段集文件,文件中数据如下: |
4 |
=A2.joinx@d(STATEID,A3:STATEID) |
用A2管道中的字段STATEID匹配集文件的STATEID字段,使用@d选项,过滤掉A2中能匹配上的记录。 |
5 |
=A1.fetch() |
A1游标执行取数动作,游标中的数据数据流过管道A2。 |
6 |
=A2.result().fetch() |
获取管道中的数据: |
使用@m选项,归并方式计算:
|
A |
|
1 |
=connect("demo").cursor("select CID,NAME,POPULATION,STATEID from CITIES").sortx(STATEID) |
返回游标,数据内容如下: 数据对STATEID有序。 |
2 |
=channel(A1) |
创建管道,并将A1游标中的数据推送到管道。 |
3 |
=file("States.btx") |
返回分段集文件,文件中数据如下: |
4 |
=A2.joinx@m(STATEID,A3:STATEID,NAME:SName,POPULATION:SPopulation;1000) |
A2对STATEID有序,A3对STATEID有序,使用@m选项,用归并方式计算。 |
5 |
=A1.fetch() |
A1游标执行取数动作,游标中的数据数据流过管道A2。 |
6 |
=A2.result().fetch() |
获取管道中的数据: |