With on 是on语法的增强。
一个On运算符在JOIN的时候的计算复杂度为两个运算的表的元素个数相乘,是一个N*M的复杂度。事实上,绝大多数JOIN是可以优化的。我们TSL里支持WITH ON语法,使得计算复杂度降低到N+M的关系
在联接的时候,如果on的条件是一个或者多个等式约束的与,在这种时候,Join的本身可以被优化,TS-SQL为这种类型的优化提供了新的语法。则范例代码
R:=select [1].*,[2].["英语成绩"] from A join B on [1].["学号"]=[2].["学号"] end;
可以写成:
R:=select [1].*,[2].["英语成绩"] from A join B with ([1].["学号"] on [2].["学号"]) end;
假如有多个等式约束,那么把ON左边以及右边的多个表达式用逗号分隔开来。
假定除了学号以外,还有一个班级号字段,联接的时候需要使用班级号和学号一起来作为联接的条件,上述的代码可以这么写:
R:=select [1].*,[2].["英语成绩"] from A join B with ([1].["学号"],[1].["班级"] on [2].["学号"],[2].["班级"]) end;
通过上述范例,with on的语法定义为:
with(等式左表达式组 on 等式右表达式组)
左右表达式组中的多个表达式用逗号“,”分隔。
采用这种with on的语法可以把笛卡尔积的计算复杂度降低到线性复杂度(参与运算的两个表的大小之和)。