T.fjoin ()

阅读(81) 标签: 虚表, 外键, 连接, 序列,

描述:

虚表定义外键关联计算后返回新虚表。

语法

T.fjoin(w:Ti,x:F,…;…)

备注:

虚表T定义计算,对T的每一行计算w,再针xx作为新字段F的值拼接到T,返回新虚表;

Tiw的别名,可在x中引用;x~时表示wF若在T中已存在则重新赋值。

w参数中可以通过外键来关联主子表。

参数:

T

虚表。

w

计算表达式,w除支持常规表达式写法以外,还支持以下两种用法:

1K=w,赋值形式,KT中的字段,w中可使用集算器函数;

2(Ki=wi,…,w)组合使用Ki=wi此处w是逻辑表达式,w中可引用Ki 

Ti

w的别名,可省略。

x

计算表达式,可省略。

F

x的字段名,可省略。

返回值:

虚表

选项:

@i

wnullfalse时删除当前行。

示例:

使用K=w表达式:

 

A

 

1

=create(file).record(["cities-x.ctx"])

组表cities-x.ctx内容如下:

2

=pseudo(A1)

由组表产生虚表。

3

=connect("demo").query("SELECT top 20 * FROM STATECAPITAL").keys(STATEID)

返回主键为STATEID的序表:

4

=A2.fjoin(STATEID=A3.find(STATEID))

虚表A2定义计算,使用k=w表达式,通过虚表的外键STATEID来关联表A3,将虚表的外键赋值为A3的指引记录,外键对应不上时返回null,结果返回新虚表。

5

=A4.import()

读取A4虚表中的数据,此时A2虚表执行A4中定义的计算操作,返回内容如下:

使用@i选项:

 

A

 

1

=create(file).record(["cities-x.ctx"])

组表cities-x.ctx内容如下:

2

=pseudo(A1)

由组表产生虚表。

3

=connect("demo").query("SELECT top 20 * FROM STATECAPITAL").keys(STATEID)

返回主键为STATEID的序表:

4

=A2.fjoin@i(STATEID=A3.find(STATEID))

虚表A2定义计算,使用@i选项,通过虚表的外键STATEID来关联表A3,外键对应不上时删除整条记录,结果返回新虚表。

5

=A4.cursor().fetch()

读取A4虚表中的数据,此时A2虚表执行A4中定义的计算操作,返回内容如下:

使用(Ki=wi,…,w)表达式:

 

A

 

1

=create(file).record(["emp-fj.ctx"])

组表emp-fj.ctx内容如下:

2

=pseudo(A1)

由组表产生虚表。

3

=6.new(~:ID,~*~:Num).keys(ID)

生成以ID为键的序表:

4

=create(name,gender).record(["Rebecca","F","Ashley","F","Matthew","M"]).keys(name)

生成以name为键的序表

5

=A2.fjoin@i((EID=A3.find(EID),NAME=A4.find(NAME),EID!=null&&NAME!=null))

虚表A2定义计算,虚表A2定义计算,虚表通过外键字段EIDA3关联,通过外键字段NAMEA4关联;将虚表的外键EID切换为A3的指引记录,外键NAME切换为A4的指引记录,然后删除键值对应不上的记录,结果返回新虚表。

6

=A5.cursor().fetch()

读取A5虚表中的数据,此时A2虚表执行A5中定义的计算操作,返回内容如下:

7

=A2.fjoin@i((EID=A3.pfind(EID),NAME=A4.pfind(NAME),EID!=null&&NAME!=null))

虚表A2定义计算,虚表通过外键字段EIDA3关联,通过外键字段NAMEA4关联;将虚表的外键EID赋值为对应A3的键值所在的序号,外键NAME赋值为对应A4的键值所在的序号,然后删除对应不上的记录,结果返回新虚表。

8

=A7.import()

读取A7虚表中的数据,此时A2虚表执行A7中定义的计算操作,返回内容如下:

其他用法:

 

A

 

1

=create(file).record(["emp-fj2.ctx"])

组表emp-fj2.ctx内容如下:

2

=pseudo(A1)

由组表产生虚表。

3

=A2.fjoin(age(BIRTHDAY):age,age>50:ifRetire)

虚表A2定义计算,先计算虚表中每个员工的年龄,然后在计算年龄是否大于50岁,age为年龄计算结果的别名,最后将年龄是否大于50岁的计算结果作为新字段加到虚表中,新字段名为ifRetire,结果返回新虚表。

4

=A3.cursor().fetch()

读取A3虚表中的数据,此时A2虚表执行A3中定义的计算操作,返回内容如下:

5

=A2.fjoin(age(BIRTHDAY),~:AGE)

虚表A2定义计算,x中使用~表示w本身,即AGE列为age(BIRTHDAY)的计算结果,结果返回新虚表。

6

=A5.import()

读取A5虚表中的数据,此时A2虚表执行A5中定义的计算操作,返回内容如下:

 

 

A

 

1

=create(file).record(["emp-fj2.ctx"])

组表emp-fj2.ctx内容如下:

2

=pseudo(A1)

由组表产生虚表。

3

=A2.fjoin(if(GENDER=="F","female","male"):GENDER,GENDER)

虚表A2定义计算,w使用赋值形式,当GENDER的值为F时返回为female,否则返回为male,由于w的别名GENDER在序列中已存在,所以不生成新的列而是对虚表中的GENDER重新赋值,结果返回新虚表。

4

=A3.import()

读取A3虚表中的数据,此时A2虚表执行A3中定义的计算操作,返回内容如下:

 

 

A

 

1

=create(file).record(["cities-x.ctx"])

组表cities-x.ctx内容如下:

2

=pseudo(A1)

由组表产生虚表。

3

=A2.fjoin@i(CID<5)

虚表A2定义计算,使用@i选项,计算虚表中CID小于5的记录,计算结果为nullfalse时删除整条记录, 结果返回新虚表。

4

=A3.import()

读取A3虚表中的数据,此时A2虚表执行A3中定义的计算操作,返回内容如下: