有一张表mot 有三个字段id                  name                     addr13007234538         zhang                    shanghai 
13764653323         wang                     shanghai 
13523454346         liming                   beijing
15923905787         wang                     shanghai
13234789790         daqing                   shanghai
13134568750         zhangqi                  shanghai
13456783448         tonghua                  shanghai
    
分别存储手机号、姓名、地址我用这个语句 把手机号查出来
select id from mot where addr='shanghai'可我想要的结果是,把移动和联痛分开,如何做出呢???高手帮帮忙!

解决方案 »

  1.   

    把号码存在一个字典表里面,然后查询的时候关联一下
    例如表A
    a   b
    130 联通
    137 移动
    135 移动
    ....
    select id,b from mot,a where addr= 'shanghai ' 
    and substr(id,1,3)=a
      

  2.   

    不知道你说的具体是怎么分开,看看下面的这个办法行不行:
    移动:
    select id from mot 
      where addr= 'shanghai' 
       and (
           id like '135%' 
        or id like '136%'
        or id like '137%' 
        or id like '138%' 
        or id like '139%' 
        or id like '159%'
           );
    联通:
    select id from mot 
      where addr= 'shanghai' 
       and (
           id like '130%' 
        or id like '131%'
        or id like '132%' 
        or id like '133%' 
        or id like '153%' 
           );
      

  3.   

    这样对字段执行函数查询速度会很慢的;
    建议增加一个字段,用来区分是联通还是移动的号码;譬如1表示联通,0表示移动。
    一个bit位就够了。
      

  4.   

    mot表再增加一个字段,bit,char都行!根据手机号特征事先执行好,并建索引,这样查询速度才不会慢!否则全表扫描
      

  5.   

    建议你改下表结构,增加一个字段以区分移动和联通.这是长期解决方案.
    如果特急的话可以这样(不知道效率如何):
    select id,b from mot,a where addr=  'shanghai  '  
    and substr(id,1,3) in  ('130' ,'131' ,'132','133','153')
    移动的如下:
    select id,b from mot,a where addr=  'shanghai  '  
    and substr(id,1,3) in  ('139' ,'135' ,'136','137','138','159')
      

  6.   

    数字方面,联通号码总是比移动号要小
     那用ORDER BY ID 可以吗?
    见笑了。