where FIND_IN_SET(TC.storeId,'4,24,56') or FIND_IN_SET(TC.storeId,TC.poolStoreId)

where FIND_IN_SET(TC.storeId,CONTACT('4,24,56',TC.poolStoreId))请问他们之间的区别是什么?由哪个函数导致的?

解决方案 »

  1.   

    什么地方不明白,第2个是在TC.poolStoreId内容前加上'4,24,56',
    如poolStoreId为1
    '4,24,561'
      

  2.   

    如果加上逗号,则两者应该一样。where FIND_IN_SET(TC.storeId,CONTACT('4,24,56,',TC.poolStoreId))
      

  3.   

    感觉第二个效率更高,FIND_IN_SET算是效率比较低的运算吧?使用两次何不只用一次。两个结果不一样的,我马上例子。
      

  4.   

        select * from T_CUSTOMER TC
        where
            FIND_IN_SET(TC.storeId,'4,5,24,')
            or FIND_IN_SET(TC.storeId,TC.poolStoreId)
            and registDate>='2010-12-01'
            and registDate<='2010-12-31'30 rows fetched in 0.0174s
      

  5.   

        select
            *
        from
            T_CUSTOMER TC
        where
            FIND_IN_SET(TC.storeId,concat('4,5,24,',TC.poolStoreId))
            and registDate>='2010-12-01'
            and registDate<='2010-12-31'2 rows fetched in 0.0134s
      

  6.   

        select * from T_CUSTOMER TC
       where
           FIND_IN_SET(TC.storeId,'4,5,24,')
           or FIND_IN_SET(TC.storeId,TC.poolStoreId)
           and registDate>='2010-12-01'
           and registDate<='2010-12-31'你的这句和顶楼的主义不同!
    少了一个括号。
    体会一下这个语句加上括号后的不同。
    select * from T_CUSTOMER TC
    where
       (
           FIND_IN_SET(TC.storeId,'4,5,24,')
           or 
           FIND_IN_SET(TC.storeId,TC.poolStoreId)
       )
       and registDate>='2010-12-01'
       and registDate<='2010-12-31'
      

  7.   

    不是的,我找到原因了,是TC.poolStoreId为null的那些记录娶不到,晕死啊。
    select
      *
      from
      T_CUSTOMER TC
      where
      FIND_IN_SET(TC.storeId,concat('4,5,24,',ifnull(TC.poolStoreId,'')))
      and registDate>='2010-12-01'
      and registDate<='2010-12-31'这样就可以了。请问哪一句效率高一些?
      

  8.   

    顶楼的是笔误,少了个逗号,没少括号啊,后面的条件并不影响问题的主题。
    select * from T_CUSTOMER TC
    where
      (
      FIND_IN_SET(TC.storeId,'4,5,24,')
      or  
      FIND_IN_SET(TC.storeId,TC.poolStoreId)
      )
      and registDate>='2010-12-01'
      and registDate<='2010-12-31'

    select * from T_CUSTOMER TC
    where
      FIND_IN_SET(TC.storeId,'4,24,56') or FIND_IN_SET(TC.storeId,TC.poolStoreId)
      and registDate>='2010-12-01'
      and registDate<='2010-12-31'
    有区别吗?效率一问是针对5楼的。谢谢解惑!
      

  9.   


    貌似明白你的意思了,可能使用列明将你带入了误区?poolStoreId是varchar类型的,就是'4,5,24,'这种的字符串,不是一个int型的数值。