FAQ > 金融建模 > 建模问题 > 语法相关

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要高。