joinx()

阅读(694) 标签: 连接, 游标,

描述:

连接游标对应的序表。

语法:

joinx(csi:Fi,xj,..;…)

备注:

针对有序游标csi的结果集使用归并法计算,返回新游标。

xj参数全省略则使用主键连接。有xj参数没主键则使用xj的值连接。支持多路游标,此时必须路数相同。csi也可以是序表。

假定xj 有序,将多个游标csi按照关联字段/关联表达式xjx1相等的关系连接,产生以Fi,…为字段的游标。Fi为引用字段,引用原游标序列csi中的记录。注意:xj仅支持升序。

不管是多少个游标之间关联,都是和cs1中的x1相等判断,因此是一对多的关系。

该函数属于延迟计算函数。

选项:

@f

全连接,找不到匹配值时,则与null对应。

@1

左连接(注意:这里是数字1,不是字母l)。

@p

按位置连接,忽略xj参数。

@i

仅用于过滤cs1,忽略Fi参数,与@f@1互斥。

@d

仅用于过滤cs1,只保留找不到的,忽略Fi参数,与@f@1互斥。

@u

只有cs1是游标,其它都是内存序表,此时不要求有序。

参数:

Fi

结果序表的字段名。

csi

用于连接的游标或序表。

xj

连接字段/表达式。

返回值:

游标

示例:

 

A

 

1

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

返回游标,数据内容如下:

2

=demo.cursor("select  top 10 EID,NAME,RELATION,GENDER,AGE from FAMILY " )

返回游标,数据内容如下:

3

=joinx(A1:Emp,EID;A2:Family,EID)

常规连接,不匹配的项丢弃,每个字段值指向原游标的一条记录

4

=A3.fetch()

读取A3游标中的数据:

  使用主键连接:

 

A

 

1

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

返回游标,游标中的表主键为EID,数据内容如下:

2

=demo.query("select  top 10 EID,NAME,RELATION,GENDER,AGE from FAMILY " ).keys(EID)

返回EID为键的序表,数据内容如下:

3

=joinx(A1:Emp;A2:Family)

使用主键连接。

4

=A3.fetch()

读取A3游标中的数据:

使用@f选项,全连接:

 

A

 

1

=demo.cursor("select  EID,NAME,DEPT,GENDER from EMPLOYEE where EID>2 and EID<10" )

返回游标,数据内容如下:

2

=demo.query("select  top 10 EID,NAME,RELATION,GENDER,AGE from FAMILY " )

返回游标,数据内容如下:

3

=joinx@f(A1:Emp,EID;A2:Family,EID)

使用@f选项,全连接,无匹配项的用null

4

=A3.fetch()

读取A3游标中的数据:

使用@1选项,左连接:

 

A

 

1

=demo.cursor("select  EID,NAME,DEPT,GENDER from EMPLOYEE where EID>2 and EID<10" )

返回游标,数据内容如下:

2

=demo.query("select  top 10 EID,NAME,RELATION,GENDER,AGE from FAMILY " )

返回游标,数据内容如下:

3

=joinx@1(A1:Emp,EID;A2:Family,EID)

使用@1选项,左连接,以第一个游标为基准,无匹配项的用null

4

=A3.fetch()

读取A3游标中的数据:

使用@p选项,按位置连接:

 

A

 

1

=demo.cursor("select  EID,NAME,DEPT,GENDER from EMPLOYEE where EID>2 and EID<10" )

返回游标,数据内容如下:

2

=demo.query("select  top 10 EID,NAME,RELATION,GENDER,AGE from FAMILY " )

返回游标,数据内容如下:

3

=joinx@p(A1:Emp,EID;A2:Family,EID)

使用@p选项,按位置连接

4

=A3.fetch()

读取A3游标中的数据:

使用@i选项,仅用于过滤:

 

A

 

1

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

返回游标,数据内容如下:

2

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

返回序表内容如下:

3

=joinx@i(A1,DEPT;A2,DEPT)

使用@i选项,过滤A1游标,能匹配上A2的记录保留

4

=A3.fetch()

读取A3游标中的数据:

使用@d选项,仅用于过滤,与@i结果相反

 

A

 

1

 

返回游标,数据内容如下:

2

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

返回序表内容如下:

3

=joinx@d(A1,DEPT;A2,DEPT)

使用@d选项,过滤A1游标,不能匹配上A2的记录保留

4

=A3.fetch()

读取A3游标中的数据:

相关概念:

join()