SELECT  DRYL,DRYLA  FROM t_table WHERE 
    DM =in('81#','71#','82#') 
如上,发现它的执行顺序不是按照IN()里面的顺序查询的,哪位高手指点一下,这个执行的优先级是怎样的呢?~~?

解决方案 »

  1.   


    貌似你写错了吧,in前面不要=
    SELECT DRYL,DRYLA FROM t_table WHERE DM in('81#','71#','82#')  ;
    这个不分什么优先级的问题,只要DM在集合中就行,('81#','71#','82#')这个只是一个DM值的集合,集合in运算没说顺序,只是匹配是否存在于集合中。
      

  2.   

    SELECT DRYL,DRYLA FROM t_table WHERE 
      DM =in('81#','71#','82#')  等于去掉
    只是在集合中找到有这条数据符合dm in的条件 没有顺序,跟你的记录中的dm'81#','71#','82#'这些集合的位置 要是检索到71 就会在 in('81#','71#','82#')  匹配
      

  3.   

    --等价于,这个没什么顺序的吧
    SELECT DRYL,DRYLA FROM t_table WHERE 
      DM ='81#' or DM='71#' or DM='82#' 
      

  4.   

    MS楼主写的SQL等价于SELECT DRYL,DRYLA FROM t_table WHERE DM ='81#' or DM='71#' or DM='82#' 
      

  5.   


    正确的写法:
          SELECT DRYL,DRYLA FROM t_table WHERE  
          DM in('81#','71#','82#') ;--去掉=
          
    in中的合集不分前后,写前写后没有效率上的变化
      

  6.   

    谢谢大家热心解答~经过测试,发现是将 IN()里面的字段排序输出的~如下:
    SELECT  DRYL AS "液量", DRYLA AS "油量", DRHS AS "含水" 
        FROM DBZER0321_02_V 
        WHERE dm in('81#','四区队','五区队','82#','71#','三区队','一区队','二区队');
    in 中随便写的~结果如下
     
            液量         油量         含水
    ---------- ---------- ----------
          3917        703       82.1
         14803       3795       74.4
          4175        904       78.3
          5735       1082       81.1
          3842        723       81.2
          2260        865       61.7
          4175        904       78.3
          3917        703       82.1
    SELECT  DRYL AS "液量", DRYLA AS "油量", DRHS AS "含水"
      2      FROM DBZER0321_02_V
      3      WHERE dm='81#';
    结果:
            液量         油量         含水
    ---------- ---------- ----------   
         14803       3795       74.4不是按in('81#','四区队','五区队','82#','71#','三区队','一区队','二区队')里面写的顺序走的~不然应该是
            液量         油量         含水
             3917        703       82.1   才对嘛~~~反正测试的结果是按照in()中的排序走的~因为需要BULK COLLECT  INTO数组里面,所以需要知道对应的字段~~~~
    O(∩_∩)O谢谢大家了~~