Q:数组存在于的判断:SQLIN与IN在集合运算中的应用 复制链接 A:v IN R存在于判断,v或v数组中的值是否都存在于R的结果集中,支持简单类型与集合的判断。
以最小的元素为判定单位。
v SQLIn R存在于判断,v一定是R的一条记录才是真。
以一条记录为判定单位。
两者差异,我们可以通过以下案例来区分:
a:=array();
a["1 ifin array(1,2)"]['In']:=1 in array(1,2);
a["1 ifin array(1,2)"]['sqlin']:=1 sqlin array(1,2);
a["1 ifin array((1,2))"]['In']:=1 in array((1,2));
a["1 ifin array((1,2))"]['sqlin']:=1 sqlin array((1,2));
a["array(1,2) ifin array((1,2),(2,3))"]['In']:=array(1,2) in array((1,2),(2,3));
a["array(1,2) ifin array((1,2),(2,3))"]['sqlin']:=array(1,2) sqlin array((1,2),(2,3));
a["array(1,3) ifin array((1,2),(2,3))"]['In']:=array(1,3) in array((1,2),(2,3));
a["array(1,3) ifin array((1,2),(2,3))"]['sqlin']:=array(1,3) sqlin array((1,2),(2,3));
return a;
//返回
结论:In即为判断v中的元素是否都存在于R的结果元素集中,不考虑任意结构。
而SQLIN则是判断v这个数组,是否是R这个数组中的一条记录,仅此而已,否则都返回假。
那么,当v为R中的多条记录的数组时,如何判断它是否是R的一个子集呢?
此时,我们可以借助集合运算中的差集或交集,例如:
v:=array((1,2),(2,3));
R:=array((0,1),(1,2),(2,3));
return v minus R=array();//返回1
或:
v:=array((1,2),(2,3));
R:=array((0,1),(1,2),(2,3));
return v intersect R=v;//返回1
其中:minus的效率比intersect要高。